This is an notebook containing code for generating plots for our talk at Cogsci 2018 (Madison, WI). The corresponding proceedings paper is here in PDF form, and here in .Rmd form.

EFA calculations

Older children (7-9y)

Factor Analysis with confidence intervals using method = psych::fa(r = d_old_wide, nfactors = nfactors_old, n.iter = n_iter, 
    rotate = chosen_rot, cor = chosen_cor)
Factor Analysis using method =  minres
Call: psych::fa(r = d_old_wide, nfactors = nfactors_old, n.iter = n_iter, 
    rotate = chosen_rot, cor = chosen_cor)
Standardized loadings (pattern matrix) based upon correlation matrix
              factor1 factor2 factor3   h2   u2 com
hunger           0.98   -0.12    0.02 0.87 0.13 1.0
smell            0.77   -0.09    0.06 0.58 0.42 1.0
fear             0.77    0.23   -0.02 0.81 0.19 1.2
pain             0.72    0.18   -0.02 0.67 0.33 1.1
fatigue          0.50    0.24    0.25 0.62 0.38 1.9
nausea           0.48   -0.01    0.16 0.30 0.70 1.2
anger            0.42    0.41    0.14 0.62 0.38 2.2
guilt           -0.11    0.80   -0.05 0.55 0.45 1.0
embarrassment   -0.16    0.75    0.11 0.52 0.48 1.1
pride            0.16    0.69    0.02 0.63 0.37 1.1
hurt_feelings    0.06    0.68    0.03 0.52 0.48 1.0
sadness          0.20    0.65    0.03 0.60 0.40 1.2
love             0.32    0.50   -0.05 0.48 0.52 1.7
happiness        0.40    0.41    0.01 0.49 0.51 2.0
figuring_out     0.04   -0.10    0.74 0.53 0.47 1.0
choice           0.06    0.09    0.72 0.61 0.39 1.0
memory          -0.17    0.05    0.71 0.46 0.54 1.1
temperature      0.04   -0.06    0.64 0.41 0.59 1.0
depth            0.03   -0.04    0.55 0.30 0.70 1.0
awareness        0.10    0.11    0.52 0.37 0.63 1.2

                      factor1 factor2 factor3
SS loadings              4.27    3.81    2.86
Proportion Var           0.21    0.19    0.14
Cumulative Var           0.21    0.40    0.55
Proportion Explained     0.39    0.35    0.26
Cumulative Proportion    0.39    0.74    1.00

 With factor correlations of 
        factor1 factor2 factor3
factor1    1.00    0.49    0.36
factor2    0.49    1.00    0.29
factor3    0.36    0.29    1.00

Mean item complexity =  1.3
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  190  and the objective function was  12.3 with Chi Square of  1408.65
The degrees of freedom for the model are 133  and the objective function was  1.71 

The root mean square of the residuals (RMSR) is  0.04 
The df corrected root mean square of the residuals is  0.05 

The harmonic number of observations is  123 with the empirical chi square  81.59  with prob <  1 
The total number of observations was  123  with Likelihood Chi Square =  192.49  with prob <  0.00057 

Tucker Lewis Index of factoring reliability =  0.929
RMSEA index =  0.068  and the 90 % confidence intervals are  0.04 0.079
BIC =  -447.53
Fit based upon off diagonal values = 0.99
Measures of factor score adequacy             
                                                  factor1 factor2 factor3
Correlation of (regression) scores with factors      0.97    0.94    0.92
Multiple R square of scores with factors             0.95    0.89    0.85
Minimum correlation of possible factor scores        0.90    0.78    0.69

 Coefficients and bootstrapped confidence intervals 
                low factor1 upper   low factor2 upper   low factor3 upper
hunger         0.83    0.98  1.05 -0.16   -0.12  0.04 -0.06    0.02  0.17
smell          0.61    0.77  0.89 -0.22   -0.09  0.09 -0.05    0.06  0.19
fear           0.68    0.77  0.95  0.10    0.23  0.37 -0.16   -0.02  0.07
pain           0.51    0.72  0.92  0.08    0.18  0.37 -0.10   -0.02  0.09
fatigue        0.32    0.50  0.75  0.11    0.24  0.36  0.13    0.25  0.38
nausea         0.34    0.48  0.65 -0.18   -0.01  0.09  0.02    0.16  0.30
anger          0.19    0.42  0.61  0.21    0.41  0.67  0.01    0.14  0.34
guilt         -0.21   -0.11  0.07  0.62    0.80  0.91 -0.13   -0.05  0.04
embarrassment -0.27   -0.16  0.02  0.63    0.75  0.86  0.02    0.11  0.19
pride         -0.03    0.16  0.28  0.59    0.69  0.87 -0.10    0.02  0.13
hurt_feelings -0.09    0.06  0.32  0.47    0.68  0.84 -0.10    0.03  0.14
sadness        0.03    0.20  0.41  0.48    0.65  0.81 -0.10    0.03  0.21
love           0.13    0.32  0.60  0.30    0.50  0.68 -0.29   -0.05  0.09
happiness      0.23    0.40  0.54  0.33    0.41  0.54 -0.09    0.01  0.20
figuring_out  -0.05    0.04  0.17 -0.23   -0.10  0.03  0.55    0.74  0.85
choice        -0.05    0.06  0.19 -0.11    0.09  0.24  0.55    0.72  0.91
memory        -0.35   -0.17  0.06 -0.19    0.05  0.33  0.63    0.71  0.77
temperature   -0.13    0.04  0.15 -0.17   -0.06  0.10  0.49    0.64  0.81
depth         -0.13    0.03  0.26 -0.40   -0.04  0.23  0.34    0.55  0.70
awareness     -0.04    0.10  0.32  0.00    0.11  0.29  0.38    0.52  0.63

 Interfactor correlations and bootstrapped confidence intervals 
            lower estimate upper
fctr1-fctr2 0.368     0.49  0.56
fctr1-fctr3 0.193     0.36  0.40
fctr2-fctr3 0.031     0.29  0.48

Younger children (4-6y)

Factor Analysis with confidence intervals using method = psych::fa(r = d_young_wide, nfactors = nfactors_young, n.iter = n_iter, 
    rotate = chosen_rot, cor = chosen_cor)
Factor Analysis using method =  minres
Call: psych::fa(r = d_young_wide, nfactors = nfactors_young, n.iter = n_iter, 
    rotate = chosen_rot, cor = chosen_cor)
Standardized loadings (pattern matrix) based upon correlation matrix
              factor1 factor2 factor3   h2   u2 com
anger            0.87   -0.11   -0.03 0.63 0.37 1.0
hunger           0.59    0.18    0.08 0.58 0.42 1.2
hurt_feelings    0.58    0.13    0.04 0.46 0.54 1.1
smell            0.55    0.12    0.01 0.40 0.60 1.1
fatigue          0.54    0.09    0.21 0.54 0.46 1.4
sadness          0.47    0.27   -0.06 0.40 0.60 1.6
nausea           0.46    0.28    0.00 0.44 0.56 1.7
pain             0.44    0.11    0.06 0.30 0.70 1.2
happiness        0.01    0.78    0.07 0.67 0.33 1.0
love            -0.01    0.76   -0.02 0.56 0.44 1.0
pride            0.22    0.51    0.07 0.49 0.51 1.4
fear             0.27    0.36    0.09 0.37 0.63 2.0
embarrassment    0.21    0.31    0.14 0.31 0.69 2.3
temperature     -0.12    0.06    0.77 0.55 0.45 1.1
memory           0.02    0.00    0.54 0.30 0.70 1.0
depth            0.15   -0.08    0.49 0.30 0.70 1.3
guilt            0.13    0.05    0.48 0.34 0.66 1.2
figuring_out     0.33   -0.14    0.45 0.37 0.63 2.0
choice           0.06    0.26    0.37 0.33 0.67 1.8
awareness        0.23    0.07    0.35 0.30 0.70 1.8

                      factor1 factor2 factor3
SS loadings              3.75    2.58    2.32
Proportion Var           0.19    0.13    0.12
Cumulative Var           0.19    0.32    0.43
Proportion Explained     0.43    0.30    0.27
Cumulative Proportion    0.43    0.73    1.00

 With factor correlations of 
        factor1 factor2 factor3
factor1    1.00    0.58    0.50
factor2    0.58    1.00    0.46
factor3    0.50    0.46    1.00

Mean item complexity =  1.4
Test of the hypothesis that 3 factors are sufficient.

The degrees of freedom for the null model are  190  and the objective function was  8.81 with Chi Square of  1017.87
The degrees of freedom for the model are 133  and the objective function was  1.69 

The root mean square of the residuals (RMSR) is  0.05 
The df corrected root mean square of the residuals is  0.06 

The harmonic number of observations is  122 with the empirical chi square  129.66  with prob <  0.57 
The total number of observations was  124  with Likelihood Chi Square =  192.34  with prob <  0.00059 

Tucker Lewis Index of factoring reliability =  0.895
RMSEA index =  0.068  and the 90 % confidence intervals are  0.04 0.078
BIC =  -448.76
Fit based upon off diagonal values = 0.98
Measures of factor score adequacy             
                                                  factor1 factor2 factor3
Correlation of (regression) scores with factors      0.93    0.92    0.89
Multiple R square of scores with factors             0.87    0.84    0.79
Minimum correlation of possible factor scores        0.75    0.68    0.58

 Coefficients and bootstrapped confidence intervals 
                low factor1 upper   low factor2 upper   low factor3 upper
anger          0.54    0.87  1.22 -0.55   -0.11  1.20 -0.27   -0.03  0.37
hunger         0.18    0.59  1.33  0.20    0.18  0.88 -0.17    0.08  0.40
hurt_feelings  0.43    0.58  1.09 -0.37    0.13  1.29 -0.24    0.04  0.38
smell          0.14    0.55  1.20  0.13    0.12  0.84 -0.20    0.01  0.27
fatigue        0.04    0.54  1.34 -0.19    0.09  1.04 -0.05    0.21  0.58
sadness        0.32    0.47  1.07 -0.08    0.27  1.12 -0.14   -0.06  0.17
nausea         0.02    0.46  1.32  0.05    0.28  1.11 -0.16    0.00  0.25
pain           0.17    0.44  0.81 -0.08    0.11  0.88 -0.11    0.06  0.40
happiness      0.05    0.01  1.01  0.41    0.78  1.20 -0.12    0.07  0.28
love           0.02   -0.01  0.86  0.44    0.76  1.17 -0.18   -0.02  0.30
pride          0.02    0.22  1.07  0.26    0.51  1.15 -0.11    0.07  0.34
fear          -0.08    0.27  0.99  0.14    0.36  1.12 -0.13    0.09  0.36
embarrassment -0.07    0.21  0.88  0.02    0.31  0.95 -0.07    0.14  0.42
temperature   -0.35   -0.12  0.43 -0.22    0.06  0.28  0.47    0.77  0.92
memory        -0.32    0.02  0.46 -0.31    0.00  0.56  0.31    0.54  0.70
depth         -0.16    0.15  0.58 -0.45   -0.08  0.52  0.20    0.49  0.82
guilt         -0.12    0.13  0.67 -0.25    0.05  0.67  0.22    0.48  0.65
figuring_out   0.07    0.33  0.78 -0.49   -0.14  0.70  0.10    0.45  0.76
choice        -0.11    0.06  0.68  0.11    0.26  0.56  0.08    0.37  0.63
awareness     -0.03    0.23  0.73 -0.60    0.07  1.12 -0.02    0.35  0.79

 Interfactor correlations and bootstrapped confidence intervals 
            lower estimate upper
fctr1-fctr2  0.41     0.58  0.63
fctr1-fctr3  0.17     0.50  0.52
fctr2-fctr3  0.20     0.46  0.42
Factor Analysis with confidence intervals using method = psych::fa(r = d_young_wide, nfactors = 2, n.iter = n_iter, rotate = chosen_rot, 
    cor = chosen_cor)
Factor Analysis using method =  minres
Call: psych::fa(r = d_young_wide, nfactors = 2, n.iter = n_iter, rotate = chosen_rot, 
    cor = chosen_cor)
Standardized loadings (pattern matrix) based upon correlation matrix
              factor1 factor2   h2   u2 com
hunger           0.72    0.05 0.57 0.43 1.0
nausea           0.70   -0.04 0.45 0.55 1.0
happiness        0.69    0.01 0.48 0.52 1.0
sadness          0.69   -0.10 0.40 0.60 1.0
pride            0.67    0.01 0.46 0.54 1.0
anger            0.67    0.00 0.45 0.55 1.0
love             0.66   -0.08 0.37 0.63 1.0
hurt_feelings    0.65    0.02 0.44 0.56 1.0
smell            0.63   -0.02 0.39 0.61 1.0
fear             0.58    0.04 0.37 0.63 1.0
fatigue          0.58    0.20 0.52 0.48 1.2
pain             0.51    0.04 0.29 0.71 1.0
embarrassment    0.48    0.10 0.30 0.70 1.1
temperature     -0.07    0.76 0.52 0.48 1.0
memory           0.00    0.55 0.30 0.70 1.0
depth            0.05    0.52 0.30 0.70 1.0
guilt            0.15    0.48 0.34 0.66 1.2
figuring_out     0.17    0.46 0.34 0.66 1.3
awareness        0.26    0.36 0.31 0.69 1.8
choice           0.28    0.34 0.31 0.69 1.9

                      factor1 factor2
SS loadings              5.73    2.16
Proportion Var           0.29    0.11
Cumulative Var           0.29    0.39
Proportion Explained     0.73    0.27
Cumulative Proportion    0.73    1.00

 With factor correlations of 
        factor1 factor2
factor1     1.0     0.6
factor2     0.6     1.0

Mean item complexity =  1.1
Test of the hypothesis that 2 factors are sufficient.

The degrees of freedom for the null model are  190  and the objective function was  8.81 with Chi Square of  1017.87
The degrees of freedom for the model are 151  and the objective function was  2.12 

The root mean square of the residuals (RMSR) is  0.06 
The df corrected root mean square of the residuals is  0.07 

The harmonic number of observations is  122 with the empirical chi square  176.89  with prob <  0.074 
The total number of observations was  124  with Likelihood Chi Square =  242.27  with prob <  3.5e-06 

Tucker Lewis Index of factoring reliability =  0.859
RMSEA index =  0.077  and the 90 % confidence intervals are  0.053 0.086
BIC =  -485.59
Fit based upon off diagonal values = 0.97
Measures of factor score adequacy             
                                                  factor1 factor2
Correlation of (regression) scores with factors      0.95    0.89
Multiple R square of scores with factors             0.91    0.79
Minimum correlation of possible factor scores        0.82    0.58

 Coefficients and bootstrapped confidence intervals 
                low factor1 upper   low factor2 upper
hunger         0.62    0.72  0.96 -0.61    0.05  1.21
nausea         0.35    0.70  1.05 -0.41   -0.04  0.93
happiness      0.21    0.69  1.09 -0.29    0.01  0.92
sadness        0.45    0.69  0.92 -0.36   -0.10  0.59
pride          0.38    0.67  0.91 -0.36    0.01  1.09
anger          0.46    0.67  0.93 -0.54    0.00  0.96
love           0.18    0.66  1.03 -0.48   -0.08  0.84
hurt_feelings  0.34    0.65  0.97 -0.26    0.02  0.91
smell          0.46    0.63  0.85 -0.72   -0.02  1.00
fear           0.43    0.58  0.89 -0.51    0.04  0.94
fatigue        0.40    0.58  1.02 -0.29    0.20  1.10
pain           0.26    0.51  0.83 -0.41    0.04  1.07
embarrassment  0.22    0.48  0.86 -0.29    0.10  0.94
temperature   -0.36   -0.07  0.86  0.68    0.76  0.93
memory        -0.14    0.00  0.68  0.04    0.55  0.97
depth         -0.24    0.05  0.80  0.19    0.52  0.85
guilt         -0.01    0.15  0.73  0.11    0.48  0.93
figuring_out   0.03    0.17  0.79 -0.13    0.46  1.21
awareness     -0.06    0.26  0.77 -0.06    0.36  1.11
choice         0.02    0.28  0.81 -0.01    0.34  0.97

 Interfactor correlations and bootstrapped confidence intervals 
            lower estimate upper
fctr1-fctr2  0.35      0.6  0.66
Factor Analysis with confidence intervals using method = psych::fa(r = d_young_wide, nfactors = 1, n.iter = n_iter, rotate = chosen_rot, 
    cor = chosen_cor)
Factor Analysis using method =  minres
Call: psych::fa(r = d_young_wide, nfactors = 1, n.iter = n_iter, rotate = chosen_rot, 
    cor = chosen_cor)
Standardized loadings (pattern matrix) based upon correlation matrix
              factor1   h2   u2 com
hunger           0.74 0.55 0.45   1
fatigue          0.72 0.52 0.48   1
happiness        0.68 0.46 0.54   1
pride            0.66 0.44 0.56   1
anger            0.65 0.43 0.57   1
hurt_feelings    0.65 0.42 0.58   1
nausea           0.65 0.42 0.58   1
smell            0.60 0.36 0.64   1
fear             0.60 0.36 0.64   1
sadness          0.60 0.36 0.64   1
love             0.58 0.34 0.66   1
embarrassment    0.55 0.30 0.70   1
choice           0.53 0.28 0.72   1
pain             0.53 0.28 0.72   1
awareness        0.52 0.27 0.73   1
figuring_out     0.51 0.26 0.74   1
guilt            0.50 0.25 0.75   1
temperature      0.49 0.24 0.76   1
depth            0.43 0.19 0.81   1
memory           0.41 0.17 0.83   1

               factor1
SS loadings       6.90
Proportion Var    0.35

Mean item complexity =  1
Test of the hypothesis that 1 factor is sufficient.

The degrees of freedom for the null model are  190  and the objective function was  8.81 with Chi Square of  1017.87
The degrees of freedom for the model are 170  and the objective function was  2.59 

The root mean square of the residuals (RMSR) is  0.08 
The df corrected root mean square of the residuals is  0.08 

The harmonic number of observations is  122 with the empirical chi square  269.99  with prob <  1.6e-06 
The total number of observations was  124  with Likelihood Chi Square =  297.95  with prob <  4.7e-09 

Tucker Lewis Index of factoring reliability =  0.826
RMSEA index =  0.084  and the 90 % confidence intervals are  0.063 0.093
BIC =  -521.5
Fit based upon off diagonal values = 0.95
Measures of factor score adequacy             
                                                  factor1
Correlation of (regression) scores with factors      0.96
Multiple R square of scores with factors             0.92
Minimum correlation of possible factor scores        0.84

 Coefficients and bootstrapped confidence intervals 
               low factor1 upper
hunger        0.68    0.74  0.84
fatigue       0.60    0.72  0.81
happiness     0.57    0.68  0.82
pride         0.55    0.66  0.78
anger         0.50    0.65  0.77
hurt_feelings 0.53    0.65  0.80
nausea        0.56    0.65  0.75
smell         0.45    0.60  0.80
fear          0.51    0.60  0.73
sadness       0.50    0.60  0.72
love          0.52    0.58  0.70
embarrassment 0.46    0.55  0.70
choice        0.43    0.53  0.63
pain          0.36    0.53  0.65
awareness     0.40    0.52  0.62
figuring_out  0.40    0.51  0.57
guilt         0.33    0.50  0.61
temperature   0.38    0.49  0.60
depth         0.25    0.43  0.55
memory        0.29    0.41  0.46

EFA plots

Participant-level analyses

Age group comparison

Thinking continuously

Linear mixed model fit by REML ['lmerMod']
Formula: diff ~ comparison * scale(age, scale = F) + (1 | subid)
   Data: df_endorsements_diff

REML criterion at convergence: 2861.2

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-3.08026 -0.56230  0.02049  0.49809  2.77031 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.826    0.9088  
 Residual             2.713    1.6471  
Number of obs: 702, groups:  subid, 234

Fixed effects:
                                      Estimate Std. Error t value
(Intercept)                           -0.09402    0.08599  -1.093
comparisonBH_GM                       -0.38034    0.08792  -4.326
comparisonMB_GM                       -0.04701    0.08792  -0.535
scale(age, scale = F)                  0.17740    0.04631   3.830
comparisonBH_GM:scale(age, scale = F) -0.23699    0.04735  -5.005
comparisonMB_GM:scale(age, scale = F)  0.08870    0.04735   1.873

Correlation of Fixed Effects:
            (Intr) cBH_GM cMB_GM s(,s=F cBHs=F
cmprsnBH_GM  0.000                            
cmprsnMB_GM  0.000 -0.500                     
scl(g,sc=F)  0.000  0.000  0.000              
cBH_GM:(s=F  0.000  0.000  0.000  0.000       
cMB_GM:(s=F  0.000  0.000  0.000  0.000 -0.500

Call:
lm(formula = diff ~ scale(age, scale = F), data = df_endorsements_diff %>% 
    filter(comparison == "BODY minus HEART"))

Residuals:
    Min      1Q  Median      3Q     Max 
-4.6524 -0.6719  0.3589  0.6677  4.6555 

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)           -0.47436    0.11072  -4.284 2.69e-05 ***
scale(age, scale = F) -0.05959    0.05963  -0.999    0.319    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.694 on 232 degrees of freedom
  (13 observations deleted due to missingness)
Multiple R-squared:  0.004286,  Adjusted R-squared:  -6.251e-06 
F-statistic: 0.9985 on 1 and 232 DF,  p-value: 0.3187


Call:
lm(formula = diff ~ scale(age, scale = F), data = df_endorsements_diff %>% 
    filter(comparison == "MIND minus BODY"))

Residuals:
    Min      1Q  Median      3Q     Max 
-4.4025 -1.3496 -0.1797  0.7691  5.5504 

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)           -0.14103    0.12899  -1.093 0.275382    
scale(age, scale = F)  0.26610    0.06947   3.830 0.000165 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.973 on 232 degrees of freedom
  (13 observations deleted due to missingness)
Multiple R-squared:  0.05948,   Adjusted R-squared:  0.05543 
F-statistic: 14.67 on 1 and 232 DF,  p-value: 0.0001647


Call:
lm(formula = diff ~ scale(age, scale = F), data = df_endorsements_diff %>% 
    filter(comparison == "MIND minus HEART"))

Residuals:
    Min      1Q  Median      3Q     Max 
-5.7817 -1.0942 -0.0243  1.2580  5.0960 

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)            0.33333    0.12836   2.597     0.01 *  
scale(age, scale = F)  0.32569    0.06913   4.711 4.24e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.963 on 232 degrees of freedom
  (13 observations deleted due to missingness)
Multiple R-squared:  0.08732,   Adjusted R-squared:  0.08338 
F-statistic:  22.2 on 1 and 232 DF,  p-value: 4.244e-06
Joining, by = c("param", "Estimate", "Std..Error", "t.value", "Pr...t..", "comparison")
Joining, by = c("param", "Estimate", "Std..Error", "t.value", "Pr...t..", "comparison")
Linear mixed model fit by REML ['lmerMod']
Formula: diff_abs ~ comparison * scale(age, scale = F) + (1 | subid)
   Data: df_endorsements_diff

REML criterion at convergence: 2378.6

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.59494 -0.60840 -0.09506  0.53532  2.75598 

Random effects:
 Groups   Name        Variance Std.Dev.
 subid    (Intercept) 0.5669   0.7529  
 Residual             1.2679   1.1260  
Number of obs: 702, groups:  subid, 234

Fixed effects:
                                      Estimate Std. Error t value
(Intercept)                            1.40456    0.06503  21.599
comparisonBH_GM                       -0.14387    0.06010  -2.394
comparisonMB_GM                        0.06980    0.06010   1.161
scale(age, scale = F)                  0.08716    0.03502   2.489
comparisonBH_GM:scale(age, scale = F)  0.02464    0.03237   0.761
comparisonMB_GM:scale(age, scale = F) -0.06013    0.03237  -1.858

Correlation of Fixed Effects:
            (Intr) cBH_GM cMB_GM s(,s=F cBHs=F
cmprsnBH_GM  0.000                            
cmprsnMB_GM  0.000 -0.500                     
scl(g,sc=F)  0.000  0.000  0.000              
cBH_GM:(s=F  0.000  0.000  0.000  0.000       
cMB_GM:(s=F  0.000  0.000  0.000  0.000 -0.500

Call:
lm(formula = diff_abs ~ scale(age, scale = F), data = df_endorsements_diff %>% 
    filter(comparison == "BODY minus HEART"))

Residuals:
    Min      1Q  Median      3Q     Max 
-1.6244 -1.0446 -0.1915  0.7121  3.9771 

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)            1.26068    0.07902  15.953  < 2e-16 ***
scale(age, scale = F)  0.11180    0.04256   2.627  0.00919 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.209 on 232 degrees of freedom
  (13 observations deleted due to missingness)
Multiple R-squared:  0.02888,   Adjusted R-squared:  0.0247 
F-statistic:   6.9 on 1 and 232 DF,  p-value: 0.009193


Call:
lm(formula = diff_abs ~ scale(age, scale = F), data = df_endorsements_diff %>% 
    filter(comparison == "MIND minus BODY"))

Residuals:
    Min      1Q  Median      3Q     Max 
-1.5618 -1.4221 -0.4329  0.5894  4.4495 

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)            1.47436    0.09163  16.091   <2e-16 ***
scale(age, scale = F)  0.02703    0.04935   0.548    0.584    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.402 on 232 degrees of freedom
  (13 observations deleted due to missingness)
Multiple R-squared:  0.001291,  Adjusted R-squared:  -0.003013 
F-statistic:   0.3 on 1 and 232 DF,  p-value: 0.5844


Call:
lm(formula = diff_abs ~ scale(age, scale = F), data = df_endorsements_diff %>% 
    filter(comparison == "MIND minus HEART"))

Residuals:
    Min      1Q  Median      3Q     Max 
-1.8730 -1.2235 -0.2740  0.7555  4.3065 

Coefficients:
                      Estimate Std. Error t value Pr(>|t|)    
(Intercept)            1.47863    0.09425  15.688   <2e-16 ***
scale(age, scale = F)  0.12266    0.05076   2.416   0.0165 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.442 on 232 degrees of freedom
  (13 observations deleted due to missingness)
Multiple R-squared:  0.02455,   Adjusted R-squared:  0.02034 
F-statistic: 5.838 on 1 and 232 DF,  p-value: 0.01645
Joining, by = c("param", "Estimate", "Std..Error", "t.value", "Pr...t..", "comparison")
Joining, by = c("param", "Estimate", "Std..Error", "t.value", "Pr...t..", "comparison")
Joining, by = c("param", "Estimate", "Std..Error", "t.value", "Pr...t..", "comparison", "diff_type")
Ignoring unknown aesthetics: fill

Supplemental slides

3 age groups

# A tibble: 3 x 6
  tercile     n   min   max  mean median
    <int> <int> <dbl> <dbl> <dbl>  <dbl>
1       1    79  4.00  5.27  4.70   4.68
2       2    79  5.27  7.94  6.62   6.72
3       3    78  7.94  9.99  8.92   8.84
Joining, by = c("capacity", "factor", "loading", "tercile")
Joining, by = c("capacity", "factor", "loading", "tercile")
Joining, by = "capacity"
Joining, by = "capacity"
Joining, by = "capacity"

Attributions

Joining, by = "capacity"

|===============================================                     | 69% ~1 s remaining     
|================================================                    | 71% ~1 s remaining     
|=================================================                   | 73% ~1 s remaining     
|===================================================                 | 76% ~1 s remaining     
|====================================================                | 77% ~1 s remaining     
|=====================================================               | 79% ~1 s remaining     
|======================================================              | 81% ~1 s remaining     
|========================================================            | 83% ~0 s remaining     
|=========================================================           | 84% ~0 s remaining     
|==========================================================          | 86% ~0 s remaining     
|===========================================================         | 88% ~0 s remaining     
|=============================================================       | 90% ~0 s remaining     
|==============================================================      | 92% ~0 s remaining     
|================================================================    | 94% ~0 s remaining     
|=================================================================   | 96% ~0 s remaining     
|==================================================================  | 98% ~0 s remaining     
|=================================================================== |100% ~0 s remaining     
Using alpha for a discrete variable is not advised.

LS0tCnRpdGxlOiAiUFJFU0VOVEFUSU9OIFdlaXNtYW4sIER3ZWNrLCAmIE1hcmttYW4gKENvZ3NjaSAyMDE4KSIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKLS0tCgpUaGlzIGlzIGFuIG5vdGVib29rIGNvbnRhaW5pbmcgY29kZSBmb3IgZ2VuZXJhdGluZyBwbG90cyBmb3Igb3VyIHRhbGsgYXQgQ29nc2NpIDIwMTggKE1hZGlzb24sIFdJKS4gVGhlIGNvcnJlc3BvbmRpbmcgcHJvY2VlZGluZ3MgcGFwZXIgaXMgW2hlcmVdKGh0dHBzOi8va2d3ZWlzbWFuLmdpdGh1Yi5pby9wdWJfZmlsZXMvV2Vpc21hbiwlMjBEd2VjaywlMjAmJTIwTWFya21hbiUyMCgyMDE4KS5wZGYpIGluIFBERiBmb3JtLCBhbmQgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9rZ3dlaXNtYW4vY29nc2NpMjAxOF9kaW1raWQvdHJlZS9tYXN0ZXIvcmV2aXNpb24pIGluIC5SbWQgZm9ybS4KCmBgYHtyLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aD0zLCBmaWcuaGVpZ2h0PTMsIGZpZy5jcm9wID0gRiwgZmlnLnBvcyA9ICJ0YiIsIGZpZy5wYXRoPSdmaWdzLycsIGVjaG89Riwgd2FybmluZz1GLCBjYWNoZT1GLCBtZXNzYWdlPUYsIHNhbml0aXplID0gVCkKYGBgCgpgYGB7ciBsaWJyYXJpZXMsIGluY2x1ZGUgPSBGfQojIGxvYWQgcmVxdWlyZWQgcGFja2FnZXMKbGlicmFyeShwbmcpCmxpYnJhcnkoZ3JpZCkKbGlicmFyeSh4dGFibGUpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShwc3ljaCkKbGlicmFyeShybXMpCmxpYnJhcnkobG1lNCkKYGBgCgpgYGB7ciBmdW5jdGlvbnMsIGluY2x1ZGUgPSBGfQojIHJvdW5kIHRvIGV4YWN0bHkgMiBkZWNpbWFsIHBsYWNlcwpyb3VuZDIgPC0gZnVuY3Rpb24oeCkge2Zvcm1hdChyb3VuZCh4LCAyKSwgbnNtYWxsID0gMil9CgojIGRldGVybWluZSBob3cgbWFueSBmYWN0b3JzIG1lZXQgY3VzdG9tIHJldGVudGlvbiBjcml0ZXJpYQpyZXRhaW5fbmZhY3RvcnMgPC0gZnVuY3Rpb24oZGZfZWZhLCBuX3ZhciA9IDIwLCAKICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5fY29yID0gImNvciIsIGNob3Nlbl9yb3QgPSAib2JsaW1pbiIpIHsKICAKICAjIG1ha2UgZnVuY3Rpb24gZm9yIGRldGVybWluaW5nIG1heCBmYWN0b3JzIHRvIGV4dHJhY3QgKGJhc2VkIG9uIGRmKQogIG1heF9mYWN0X2Z1biA8LSBmdW5jdGlvbihwKSB7CiAgICAKICAgIHNfbW9tZW50cyA8LSBmdW5jdGlvbihwKSB7cCoocCsxKS8yfQogICAgcGFyYW1fZXN0IDwtIGZ1bmN0aW9uKHAsIGspIHtwKmsgKyBwIC0gKGsqKGstMSkvMil9CiAgICBjaGVja19vayA8LSBmdW5jdGlvbihwLCBrKSB7CiAgICAgIGEgPC0gKHAtayleMgogICAgICBiIDwtIHArawogICAgICByZXR1cm4oaWZlbHNlKGE+YiwgVFJVRSwgRkFMU0UpKQogICAgfQogICAgCiAgICBkZl9jaGVjayA8LSBkYXRhLmZyYW1lKCkKICAgIGZvcihpIGluIDE6cCl7CiAgICAgIGRmX2NoZWNrW2ksImNoZWNrIl0gPC0gY2hlY2tfb2socCxpKQogICAgfQogICAgCiAgICBtYXggPC0gZGZfY2hlY2sgJT4lIGZpbHRlcihjaGVjaykgJT4lIG5yb3coKQogICAgcmV0dXJuKG1heCkKICAgIAogIH0KICAKICAjIGRvIG1heGltYWwgZWZhCiAgbmZhY3RfbWF4IDwtIG1heF9mYWN0X2Z1bihuX3ZhcikKICBlZmFfbWF4X3Vucm90IDwtIHBzeWNoOjpmYShkZl9lZmEsIG5mYWN0b3JzID0gbmZhY3RfbWF4LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5fY29yLCByb3RhdGUgPSAibm9uZSIpCiAgCiAgIyBrZWVwIGZhY3RvcnMgd2l0aCBlaWdlbnZhbHVlcyA+IDEsIHByb3BvcnRpb24gdmFyIGV4cGxhaW5lZCA+IDUlCiAgbmZhY3Rfa2VlcF9taWQgPC0gZWZhX21heF91bnJvdCRWYWNjb3VudGVkICU+JQogICAgdCgpICU+JQogICAgZGF0YS5mcmFtZSgpICU+JQogICAgcm93bmFtZXNfdG9fY29sdW1uKCJmYWN0b3IiKSAlPiUKICAgIGZpbHRlcihTUy5sb2FkaW5ncyA+IDEsIFByb3BvcnRpb24uRXhwbGFpbmVkID4gMC4wNSkgJT4lCiAgICBucm93KCkKICAKICAjIGRvIGVmYSB3aXRoIG5mYWN0X2tlZXBfbWlkIGZhY3RvcnMgKyByb3RhdGlvbgogIGVmYV9taWRfcm90IDwtIHBzeWNoOjpmYShkZl9lZmEsIG5mYWN0b3JzID0gbmZhY3Rfa2VlcF9taWQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5fY29yLCByb3RhdGUgPSBjaG9zZW5fcm90KQogIAogICMga2VlcCBmYWN0b3JzIHRoYXQgYXJlIGRvbWluYW50IGZvciA+PSAxIGl0ZW0KICBuZmFjdF9rZWVwX2ZpbmFsIDwtIGVmYV9taWRfcm90JGxvYWRpbmdzW10gJT4lCiAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogICAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogICAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIGNvdW50KGZhY3RvcikgJT4lCiAgICBucm93KCkKICAKICByZXR1cm4obmZhY3Rfa2VlcF9maW5hbCkKICAKfQoKIyBwcmludCB0b3AgbiBkb21pbmFudCBpdGVtcyBieSBmYWN0b3IKdG9wX25fZG9tQ2FwIDwtIGZ1bmN0aW9uKGxvYWRpbmdzX2RmLCBuLCBmYWN0b3IpewogIGRvbV9kZiA8LSBsb2FkaW5nc19kZiAlPiUKICAgIGZ1bGxfam9pbihkX2FsbCAlPiUgZGlzdGluY3QoY2FwYWNpdHksIGNhcFdvcmRpbmcpKSAlPiUKICAgIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSwgLWNhcFdvcmRpbmcpICU+JQogICAgZ3JvdXBfYnkoY2FwYWNpdHksIGNhcFdvcmRpbmcpICU+JQogICAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICAgIHVuZ3JvdXAoKSAlPiUKICAgIGdyb3VwX2J5KGZhY3RvcikgJT4lCiAgICB0b3BfbihuLCBhYnMobG9hZGluZykpCiAgCiAgd29yZGluZ3MgPC0gZG9tX2RmJGNhcFdvcmRpbmdbZG9tX2RmJGZhY3RvciA9PSBmYWN0b3JdICU+JSAKICAgIHBhc3RlKGNvbGxhcHNlID0gIiwgIikKICAKICByZXR1cm4od29yZGluZ3MpCiAgCn0KYGBgCgpgYGB7ciBjaG9pY2VzLCBpbmNsdWRlID0gRn0KIyB3aGF0IGNvcnJlbGF0aW9uIHRvIHVzZQpjaG9zZW5fY29yIDwtICJjb3IiICMgcmVwb3J0ZWQgaW4gcGFwZXIKIyBjaG9zZW5fY29yIDwtICJwb2x5IiAjIGFsdGVybmF0aXZlIG9wdGlvbgoKIyB3aGF0IHJvdGF0aW9uIHRvIHVzZQpjaG9zZW5fcm90IDwtICJvYmxpbWluIiAjIHJlcG9ydGVkIGluIHBhcGVyCiMgY2hvc2VuX3JvdCA8LSAidmFyaW1heCIgIyBhbHRlcm5hdGl2ZSBvcHRpb24KCiMgbnVtYmVyIG9mIGl0ZXJhdGlvbnMgZm9yIGVmYQpuX2l0ZXIgPC0gMTAKIyBuX2l0ZXIgPC0gNTAwMApgYGAKCmBgYHtyIGxvYWQgZGF0YSwgaW5jbHVkZSA9IEYsIHdhcm5pbmcgPSBGfQojIG9sZGVyIGNoaWxkcmVuICg3LTl5KQpkX3Jhd19vbGQgPC0gcmVhZC5jc3YoIi9Vc2Vycy9rd2Vpc21hbi9Eb2N1bWVudHMvUmVzZWFyY2ggKFN0YW5mb3JkKS9Qcm9qZWN0cy9EaW1raWQvZGlta2lkL2RhdGEvY2hpbGRyZW4vcnVuLTAyXzIwMTctMDgtMDhfYW5vbnltaXplZC5jc3YiKSAlPiUKICBtdXRhdGUoYWdlX2dyb3VwID0gImNoaWxkcmVuXzc5IikgJT4lCiAgc2VsZWN0KC1YLCAtdHJpYWwuY29tbWVudHMsIC10cmlhbENvbW1lbnRzLCAtc2Vzc2lvbkNvbW1lbnRzKQoKIyB5b3VuZ2VyIGNoaWxkcmVuICg0LTZ5KQpkX3Jhd195b3VuZyA8LSByZWFkLmNzdigiL1VzZXJzL2t3ZWlzbWFuL0RvY3VtZW50cy9SZXNlYXJjaCAoU3RhbmZvcmQpL1Byb2plY3RzL0RpbWtpZC9kaW1raWQvZGF0YS9jaGlsZHJlbi9ydW4tMDNfMjAxNy0wOC0yMV9hbm9ueW1pemVkLmNzdiIpICU+JQogIG11dGF0ZShhZ2VfZ3JvdXAgPSAiY2hpbGRyZW5fNDYiKSAlPiUKICBzZWxlY3QoLVgsIC10cmlhbC5jb21tZW50cywgLXRyaWFsQ29tbWVudHMsIC1zZXNzaW9uQ29tbWVudHMpCgpkX3JhdyA8LSBkX3Jhd19vbGQgJT4lIAogIGZ1bGxfam9pbihkX3Jhd195b3VuZykgJT4lCiAgbXV0YXRlKGRvYiA9IHBhcnNlX2RhdGV0aW1lKGRhdGVPZkJpcnRoLCAiJW0vJWQvJXkiKSwKICAgICAgICAgZG90ID0gcGFyc2VfZGF0ZXRpbWUoZ3N1YigiMjAxNyIsICIxNyIsIGRhdGVPZlRlc3QpLCAiJW0vJWQvJXkiKSwgCiAgICAgICAgIGFnZSA9IGludGVydmFsKHN0YXJ0ID0gZG9iLCBlbmQgPSBkb3QpIC8gCiAgICAgICAgICAgZHVyYXRpb24obnVtID0gMSwgdW5pdHMgPSAieWVhcnMiKSkgJT4lCiAgc2VsZWN0KC1kYXRlT2ZCaXJ0aCwgLWRhdGVPZlRlc3QsIC1kb2IsIC1kb3QpCmBgYAoKYGBge3IgdGlkeSBkYXRhLCBpbmNsdWRlID0gRiwgd2FybmluZyA9IEZ9CiMgaW1wbGVtZW50IGZpbHRlcnMKZDAgPC0gZF9yYXcgJT4lCiAgZmlsdGVyKHRyaWFsTnVtIDw9IDIwKSAlPiUKICBtdXRhdGUocmVzcG9uc2UgPSB0b2xvd2VyKHJlc3BvbnNlKSwKICAgICAgICAgYWdlX2dyb3VwID0gaWZlbHNlKGlzLm5hKGFnZSksIGFnZV9ncm91cCwgIyByZS1zb3J0IGFzIG5lZWRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGFnZSA8IDcsICJjaGlsZHJlbl80NiIsICJjaGlsZHJlbl83OSIpKSkgJT4lCiAgZmlsdGVyKChhZ2UgPj0gNCAmIGFnZSA8IDEwKSB8IGlzLm5hKGFnZSksICMgb3V0c2lkZSBvZiBhZ2UgcmFuZ2UKICAgICAgICAgKHJ0ID49IDI1MCB8IGlzLm5hKHJ0KSksICMgZmFzdCBSVHMKICAgICAgICAgcmVzcG9uc2UgJWluJSBjKCJubyIsICJraW5kYSIsICJ5ZXMiKSkgIyBza2lwcGVkIHRyaWFscwoKIyByZWNvZGUgdmFyaWFibGVzCmQxIDwtIGQwICU+JQogIG11dGF0ZShjYXBXb3JkaW5nID0gZ3N1YigiICQiLCAiIiwgY2FwV29yZGluZyksCiAgICAgICAgIGNhcFdvcmRpbmcgPSBnc3ViKCIgLS0gIiwgIi0tIiwgY2FwV29yZGluZyksCiAgICAgICAgIGNhcGFjaXR5ID0gcmVjb2RlKGNhcFdvcmRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBhd2FyZSBvZiB0aGluZ3MiID0gImF3YXJlbmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWVsIGVtYmFycmFzc2VkIiA9ICJlbWJhcnJhc3NtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlZWwgZ3VpbHR5IiA9ICJndWlsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWVsIGhhcHB5IiA9ICJoYXBwaW5lc3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZmVlbCBsb3ZlIiA9ICJsb3ZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlZWwgcGFpbiIgPSAicGFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWVsIHByb3VkIiA9ICJwcmlkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWVsIHNhZCIgPSAic2FkbmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWVsIHNjYXJlZCIgPSAiZmVhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJmZWVsIHNpY2stLWxpa2Ugd2hlbiB5b3UgZmVlbCBsaWtlIHlvdSBtaWdodCB0aHJvdyB1cCIgPSAibmF1c2VhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlZWwgdGlyZWQiID0gImZhdGlndWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZmlndXJlIG91dCBob3cgdG8gZG8gdGhpbmdzIiA9ICJmaWd1cmluZ19vdXQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IGFuZ3J5IiA9ICJhbmdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXQgaHVuZ3J5IiA9ICJodW5nZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0IGh1cnQgZmVlbGluZ3MiID0gImh1cnRfZmVlbGluZ3MiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAibWFrZSBjaG9pY2VzIiA9ICJjaG9pY2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtZW1iZXIgdGhpbmdzIiA9ICJtZW1vcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vuc2UgdGVtcGVyYXR1cmVzIiA9ICJ0ZW1wZXJhdHVyZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZW5zZSB3aGV0aGVyIHNvbWV0aGluZyBpcyBjbG9zZSBieSBvciBmYXIgYXdheSIgPSAiZGVwdGgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic21lbGwgdGhpbmdzIiA9ICJzbWVsbCIpLAogICAgICAgICByZXNwb25zZU51bSA9IHJlY29kZShyZXNwb25zZSwgIm5vIiA9IDAsICJraW5kYSIgPSAwLjUsICJ5ZXMiID0gMSksCiAgICAgICAgIGNoYXJhY3RlciA9IGZhY3RvcihjaGFyYWN0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJlbGVwaGFudCIsICJnb2F0IiwgIm1vdXNlIiwgImJpcmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVldGxlIiwgInRlZGR5X2JlYXIiLCAiZG9sbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb2JvdCIsICJjb21wdXRlciIpKSwKICAgICAgICAgdGVzdGluZ1NpdGUgPSB0b2xvd2VyKHRlc3RpbmdTaXRlKSwKICAgICAgICAgdGVzdGluZ1NpdGVUeXBlID0gcmVjb2RlKHRlc3RpbmdTaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbmciID0gInByZXNjaG9vbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiam16IiA9ICJtdXNldW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlY2giID0gIm11c2V1bSIpKSAlPiUKICBkaXN0aW5jdCgpCgojIHNlcGFyYXRlIGJ5IGFnZSBncm91cApkX2FsbCA8LSBkMQpkX29sZCA8LSBkMSAlPiUgZmlsdGVyKGFnZV9ncm91cCA9PSAiY2hpbGRyZW5fNzkiKQpkX3lvdW5nIDwtIGQxICU+JSBmaWx0ZXIoYWdlX2dyb3VwID09ICJjaGlsZHJlbl80NiIpCgojIG1ha2Ugd2lkZWZvcm0gdmVyc2lvbnMgZm9yIEVGQQpkX29sZF93aWRlIDwtIGRfb2xkICU+JQogIGRpc3RpbmN0KHN1YmlkLCBjYXBhY2l0eSwgcmVzcG9uc2VOdW0pICU+JQogIHNwcmVhZChjYXBhY2l0eSwgcmVzcG9uc2VOdW0pICU+JQogIHJlbW92ZV9yb3duYW1lcygpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygic3ViaWQiKQoKZF95b3VuZ193aWRlIDwtIGRfeW91bmcgJT4lCiAgZGlzdGluY3Qoc3ViaWQsIGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgc3ByZWFkKGNhcGFjaXR5LCByZXNwb25zZU51bSkgJT4lCiAgcmVtb3ZlX3Jvd25hbWVzKCkgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKCJzdWJpZCIpCgojIHJtKGRfcmF3LCBkX3Jhd19vbGQsIGRfcmF3X3lvdW5nLCBkMCwgZDEpCmBgYAoKYGBge3IgcGFydGljaXBhbnRzLCBpbmNsdWRlID0gRn0KIyBuCm5fdG90YWwgPC0gZGF0YS5mcmFtZShkX2FsbCAlPiUgZGlzdGluY3Qoc3ViaWQpICU+JSBjb3VudCgpKSRuCm5fb2xkIDwtIGRhdGEuZnJhbWUoZF9vbGQgJT4lIGRpc3RpbmN0KHN1YmlkKSAlPiUgY291bnQoKSkkbgpuX3lvdW5nIDwtIGRhdGEuZnJhbWUoZF95b3VuZyAlPiUgZGlzdGluY3Qoc3ViaWQpICU+JSBjb3VudCgpKSRuCgojIGFnZQphZ2VfbWVkaWFuX29sZCA8LSBtZWRpYW4oZF9vbGQkYWdlLCBuYS5ybSA9IFQpCmFnZV9taW5fb2xkIDwtIG1pbihkX29sZCRhZ2UsIG5hLnJtID0gVCkKYWdlX21heF9vbGQgPC0gbWF4KGRfb2xkJGFnZSwgbmEucm0gPSBUKQphZ2VfbWVkaWFuX3lvdW5nIDwtIG1lZGlhbihkX3lvdW5nJGFnZSwgbmEucm0gPSBUKQphZ2VfbWluX3lvdW5nIDwtIG1pbihkX3lvdW5nJGFnZSwgbmEucm0gPSBUKQphZ2VfbWF4X3lvdW5nIDwtIG1heChkX3lvdW5nJGFnZSwgbmEucm0gPSBUKQoKIyBzdHVkeSBkdXJhdGlvbgpkdXJhdGlvbl9tZWRpYW5fb2xkIDwtIG1lZGlhbihkX29sZCRzZXNzaW9uRHVyYXRpb24sIG5hLnJtID0gVCkKZHVyYXRpb25fbWVkaWFuX3lvdW5nIDwtIG1lZGlhbihkX3lvdW5nJHNlc3Npb25EdXJhdGlvbiwgbmEucm0gPSBUKQoKIyBzaXRlCnNpdGVfZGYgPC0gZF9hbGwgJT4lCiAgZGlzdGluY3QoYWdlX2dyb3VwLCBzdWJpZCwgdGVzdGluZ1NpdGVUeXBlKSAlPiUKICBjb3VudChhZ2VfZ3JvdXAsIHRlc3RpbmdTaXRlVHlwZSkgJT4lCiAgZ3JvdXBfYnkoYWdlX2dyb3VwKSAlPiUKICBtdXRhdGUocHJvcCA9IG4vc3VtKG4pKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgY2hhcmFjdGVyCmNoYXJhY3Rlcl9kZiA8LSBkX2FsbCAlPiUKICBkaXN0aW5jdChhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIpICU+JQogIGNvdW50KGFnZV9ncm91cCwgY2hhcmFjdGVyKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgcnQgPCAyNTBtcwpydF9kZiA8LSBkX3JhdyAlPiUKICBkaXN0aW5jdChhZ2VfZ3JvdXAsIHN1YmlkLCB0cmlhbE51bSwgcnQpICU+JQogIG11dGF0ZShydF9mYXN0ID0gaWZlbHNlKGlzLm5hKHJ0KSwgIm9rIiwgaWZlbHNlKHJ0IDwgMjUwLCAiZmFzdCIsICJvayIpKSwKICAgICAgICAgcnRfZmFzdCA9IGZhY3RvcihydF9mYXN0LCBsZXZlbHMgPSBjKCJvayIsICJmYXN0IikpKSAlPiUKICBjb3VudChhZ2VfZ3JvdXAsIHJ0X2Zhc3QpICU+JQogIGNvbXBsZXRlKHJ0X2Zhc3QsIG5lc3RpbmcoYWdlX2dyb3VwKSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBkYXRhLmZyYW1lKCkKCiMgc2tpcHBlZCB0cmlhbHMKc2tpcF9kZiA8LSBkX2FsbCAlPiUKICBjb21wbGV0ZShjYXBhY2l0eSwgbmVzdGluZyhzdWJpZCwgYWdlX2dyb3VwKSwgCiAgICAgICAgICAgZmlsbCA9IGxpc3QocmVzcG9uc2UgPSAiU0tJUCIpKSAlPiUKICBkaXN0aW5jdChhZ2VfZ3JvdXAsIHN1YmlkLCBjYXBhY2l0eSwgcmVzcG9uc2UpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGZhY3RvcihyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygibm8iLCAia2luZGEiLCAieWVzIiwgIlNLSVAiKSkpICU+JQogIGNvdW50KGFnZV9ncm91cCwgcmVzcG9uc2UpICU+JSAKICBncm91cF9ieShhZ2VfZ3JvdXApICU+JQogIG11dGF0ZShwcm9wID0gbi9zdW0obikpICU+JQogIGRhdGEuZnJhbWUoKQpgYGAKCiMgRUZBIGNhbGN1bGF0aW9ucwoKIyMgT2xkZXIgY2hpbGRyZW4gKDctOXkpCgpgYGB7ciBlZmEgb2xkLCB3YXJuaW5ncyA9IEZBTFNFfQojIGRldGVybWluZSBob3cgbWFueSBmYWN0b3JzIHRvIGV4dHJhY3QKbmZhY3RvcnNfb2xkIDwtIHJldGFpbl9uZmFjdG9ycyhkZl9lZmEgPSBkX29sZF93aWRlKQoKIyBhbHRlcm5hdGl2ZSBmYWN0b3IgcmV0ZW50aW9uIG1ldGhvZHM6IHVuY29tbWVudCB0byBydW4KIyBmYS5wYXJhbGxlbChkX29sZF93aWRlLCBmYSA9ICJmYSIsIG4uaXRlciA9IG5faXRlcikKIyBWU1MoZF9vbGRfd2lkZSkKCiMgZG8gRUZBCmVmYV9vbGQgPC0gcHN5Y2g6OmZhKGRfb2xkX3dpZGUsIG5mYWN0b3JzID0gbmZhY3RvcnNfb2xkLCBuLml0ZXIgPSBuX2l0ZXIsCiAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3Nlbl9jb3IsIHJvdCA9IGNob3Nlbl9yb3QpICU+JSBmYS5zb3J0KCkKY29sbmFtZXMoZWZhX29sZCRsb2FkaW5ncykgPC0gcGFzdGUoImZhY3RvciIsIDE6bmZhY3RvcnNfb2xkLCBzZXAgPSAiIikKCiMgZ2V0IHVzZWZ1bCBpbmZvIGZyb20gRUZBCmVmYV9vbGRfbG9hZGluZ3MgPC0gZWZhX29sZCRsb2FkaW5nc1tdICU+JSAKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpCgplZmFfb2xkX3ZhcmlhbmNlIDwtIGVmYV9vbGQkVmFjY291bnRlZCAlPiUgCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBtdXRhdGUoZmFjdG9yID0gcGFzdGUoImZhY3RvciIsIDE6bmZhY3RvcnNfb2xkLCBzZXAgPSAiIikpCgojIGVmYV9vbGRfY29ycmVsYXRpb25zIDwtIGVmYV9vbGQkc2NvcmUuY29yICU+JQojICAgZGF0YS5mcmFtZSgpICU+JQojICAgcmVuYW1lKGZhY3RvcjEgPSBYMSwgZmFjdG9yMiA9IFgyLCBmYWN0b3IzID0gWDMpICU+JQojICAgbXV0YXRlKGZhY3RvckEgPSBwYXN0ZSgiZmFjdG9yIiwgMTpuZmFjdG9yc19vbGQsIHNlcCA9ICIiKSkgJT4lCiMgICBnYXRoZXIoZmFjdG9yQiwgY29yLCAtZmFjdG9yQSkKCmVmYV9vbGQKYGBgCgojIyBZb3VuZ2VyIGNoaWxkcmVuICg0LTZ5KQoKYGBge3IgZWZhIHlvdW5nLCB3YXJuaW5ncyA9IEZBTFNFfQojIGRldGVybWluZSBob3cgbWFueSBmYWN0b3JzIHRvIGV4dHJhY3QKbmZhY3RvcnNfeW91bmcgPC0gcmV0YWluX25mYWN0b3JzKGRmX2VmYSA9IGRfeW91bmdfd2lkZSkKCiMgYWx0ZXJuYXRpdmUgZmFjdG9yIHJldGVudGlvbiBtZXRob2RzOiB1bmNvbW1lbnQgdG8gcnVuCiMgZmEucGFyYWxsZWwoZF95b3VuZ193aWRlLCBmYSA9ICJmYSIsIG4uaXRlciA9IG5faXRlcikKIyBWU1MoZF95b3VuZ193aWRlKQoKIyBkbyBFRkEKZWZhX3lvdW5nIDwtIHBzeWNoOjpmYShkX3lvdW5nX3dpZGUsIG5mYWN0b3JzID0gbmZhY3RvcnNfeW91bmcsIG4uaXRlciA9IG5faXRlciwKICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuX2Nvciwgcm90ID0gY2hvc2VuX3JvdCkgJT4lIGZhLnNvcnQoKQpjb2xuYW1lcyhlZmFfeW91bmckbG9hZGluZ3MpIDwtIHBhc3RlKCJmYWN0b3IiLCAxOm5mYWN0b3JzX3lvdW5nLCBzZXAgPSAiIikKCiMgZ2V0IHVzZWZ1bCBpbmZvIGZyb20gRUZBCmVmYV95b3VuZ19sb2FkaW5ncyA8LSBlZmFfeW91bmckbG9hZGluZ3NbXSAlPiUgCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKQoKZWZhX3lvdW5nX3ZhcmlhbmNlIDwtIGVmYV95b3VuZyRWYWNjb3VudGVkICU+JSAKICB0KCkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIG11dGF0ZShmYWN0b3IgPSBwYXN0ZSgiZmFjdG9yIiwgMTpuZmFjdG9yc195b3VuZywgc2VwID0gIiIpKQoKZWZhX3lvdW5nX2NvcnJlbGF0aW9ucyA8LSBlZmFfeW91bmckc2NvcmUuY29yICU+JQogIGRhdGEuZnJhbWUoKQpjb2xuYW1lcyhlZmFfeW91bmdfY29ycmVsYXRpb25zKSA8LSBwYXN0ZSgiZmFjdG9yIiwgMTpuZmFjdG9yc195b3VuZywgc2VwID0gIiIpCmVmYV95b3VuZ19jb3JyZWxhdGlvbnMgPC0gZWZhX3lvdW5nX2NvcnJlbGF0aW9ucyAlPiUKICBtdXRhdGUoZmFjdG9yQSA9IHBhc3RlKCJmYWN0b3IiLCAxOm5mYWN0b3JzX3lvdW5nLCBzZXAgPSAiIikpICU+JQogIGdhdGhlcihmYWN0b3JCLCBjb3IsIC1mYWN0b3JBKQoKIyBjYWxjdWxhdGUgY29uZ3J1ZW5jZSB3aXRoIG9sZGVyIGtpZHMnIGZhY3RvcnMKZWZhX3lvdW5nX2NvbmdydWVuY2UgPC0gZmFjdG9yLmNvbmdydWVuY2UoZWZhX29sZCwgZWZhX3lvdW5nKSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJvbGRfZmFjdG9yIikgJT4lCiAgZ2F0aGVyKHlvdW5nX2ZhY3RvciwgY29uZ3J1ZW5jZSwgLW9sZF9mYWN0b3IpCgplZmFfeW91bmcKYGBgCgpgYGB7ciBlZmEgeW91bmcgZm9yY2UgMiBmYWN0b3JzLCB3YXJuaW5ncyA9IEZBTFNFfQojIGRvIEVGQSwgZm9yY2libHkgZXh0cmFjdGluZyAyIGZhY3RvcnMKZWZhX3lvdW5nX2ZvcmNlMiA8LSBwc3ljaDo6ZmEoZF95b3VuZ193aWRlLCBuZmFjdG9ycyA9IDIsIG4uaXRlciA9IG5faXRlciwKICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuX2Nvciwgcm90ID0gY2hvc2VuX3JvdCkgJT4lIGZhLnNvcnQoKQpjb2xuYW1lcyhlZmFfeW91bmdfZm9yY2UyJGxvYWRpbmdzKSA8LSBwYXN0ZSgiZmFjdG9yIiwgMToyLCBzZXAgPSAiIikKCiMgZ2V0IHVzZWZ1bCBpbmZvIGZyb20gRUZBCmVmYV95b3VuZ19mb3JjZTJfbG9hZGluZ3MgPC0gZWZhX3lvdW5nX2ZvcmNlMiRsb2FkaW5nc1tdICU+JSAKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpCgplZmFfeW91bmdfZm9yY2UyX3ZhcmlhbmNlIDwtIGVmYV95b3VuZ19mb3JjZTIkVmFjY291bnRlZCAlPiUgCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBtdXRhdGUoZmFjdG9yID0gcGFzdGUoImZhY3RvciIsIDE6Miwgc2VwID0gIiIpKQoKZWZhX3lvdW5nX2ZvcmNlMl9jb3JyZWxhdGlvbnMgPC0gZWZhX3lvdW5nX2ZvcmNlMiRzY29yZS5jb3IgJT4lCiAgZGF0YS5mcmFtZSgpCmNvbG5hbWVzKGVmYV95b3VuZ19mb3JjZTJfY29ycmVsYXRpb25zKSA8LSBwYXN0ZSgiZmFjdG9yIiwgMToyLCBzZXAgPSAiIikKZWZhX3lvdW5nX2ZvcmNlMl9jb3JyZWxhdGlvbnMgPC0gZWZhX3lvdW5nX2ZvcmNlMl9jb3JyZWxhdGlvbnMgJT4lCiAgbXV0YXRlKGZhY3RvckEgPSBwYXN0ZSgiZmFjdG9yIiwgMToyLCBzZXAgPSAiIikpICU+JQogIGdhdGhlcihmYWN0b3JCLCBjb3IsIC1mYWN0b3JBKQoKIyBjYWxjdWxhdGUgY29uZ3J1ZW5jZSB3aXRoIG9sZGVyIGtpZHMnIGZhY3RvcnMKZWZhX3lvdW5nX2ZvcmNlMl9jb25ncnVlbmNlIDwtIGZhY3Rvci5jb25ncnVlbmNlKGVmYV9vbGQsIGVmYV95b3VuZ19mb3JjZTIpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oIm9sZF9mYWN0b3IiKSAlPiUKICBnYXRoZXIoeW91bmdfZm9yY2UyX2ZhY3RvciwgY29uZ3J1ZW5jZSwgLW9sZF9mYWN0b3IpCgplZmFfeW91bmdfZm9yY2UyCmBgYAoKYGBge3IgZWZhIHlvdW5nIGZvcmNlIDEgZmFjdG9yLCB3YXJuaW5ncyA9IEZBTFNFfQojIGRvIEVGQSwgZm9yY2libHkgZXh0cmFjdGluZyAxIGZhY3RvcgplZmFfeW91bmdfZm9yY2UxIDwtIHBzeWNoOjpmYShkX3lvdW5nX3dpZGUsIG5mYWN0b3JzID0gMSwgbi5pdGVyID0gbl9pdGVyLAogICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5fY29yLCByb3QgPSBjaG9zZW5fcm90KSAlPiUgZmEuc29ydCgpCmNvbG5hbWVzKGVmYV95b3VuZ19mb3JjZTEkbG9hZGluZ3MpIDwtIHBhc3RlKCJmYWN0b3IiLCAxLCBzZXAgPSAiIikKCiMgZ2V0IHVzZWZ1bCBpbmZvIGZyb20gRUZBCmVmYV95b3VuZ19mb3JjZTFfbG9hZGluZ3MgPC0gZWZhX3lvdW5nX2ZvcmNlMSRsb2FkaW5nc1tdICU+JSAKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpCgplZmFfeW91bmdfZm9yY2UxX3ZhcmlhbmNlIDwtIGVmYV95b3VuZ19mb3JjZTEkVmFjY291bnRlZCAlPiUgCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBtdXRhdGUoZmFjdG9yID0gcGFzdGUoImZhY3RvciIsIDEsIHNlcCA9ICIiKSkKCiMgZWZhX3lvdW5nX2ZvcmNlMV9jb3JyZWxhdGlvbnMgPC0gZWZhX3lvdW5nX2ZvcmNlMSRzY29yZS5jb3IgJT4lCiMgICBkYXRhLmZyYW1lKCkKIyBjb2xuYW1lcyhlZmFfeW91bmdfZm9yY2UxX2NvcnJlbGF0aW9ucykgPC0gcGFzdGUoImZhY3RvciIsIDEsIHNlcCA9ICIiKQojIGVmYV95b3VuZ19mb3JjZTFfY29ycmVsYXRpb25zIDwtIGVmYV95b3VuZ19mb3JjZTFfY29ycmVsYXRpb25zICU+JQojICAgbXV0YXRlKGZhY3RvckEgPSBwYXN0ZSgiZmFjdG9yIiwgMSwgc2VwID0gIiIpKSAlPiUKIyAgIGdhdGhlcihmYWN0b3JCLCBjb3IsIC1mYWN0b3JBKQoKIyBjYWxjdWxhdGUgY29uZ3J1ZW5jZSB3aXRoIG9sZGVyIGtpZHMnIGZhY3RvcnMKZWZhX3lvdW5nX2ZvcmNlMV9jb25ncnVlbmNlIDwtIGZhY3Rvci5jb25ncnVlbmNlKGVmYV9vbGQsIGVmYV95b3VuZ19mb3JjZTEpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oIm9sZF9mYWN0b3IiKSAlPiUKICBnYXRoZXIoeW91bmdfZm9yY2UxX2ZhY3RvciwgY29uZ3J1ZW5jZSwgLW9sZF9mYWN0b3IpCgplZmFfeW91bmdfZm9yY2UxCmBgYAoKIyBFRkEgcGxvdHMKCmBgYHtyfQpvcmRlcl9vbGQgPC0gZWZhX29sZF9sb2FkaW5ncyAlPiUgCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUgCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JSAKICB0b3BfbigxLCBhYnMobG9hZGluZykpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbigib3JkZXJfb2xkIikgJT4lIAogIG11dGF0ZShvcmRlcl9vbGQgPSBhcy5udW1lcmljKG9yZGVyX29sZCkpICU+JQogIHNlbGVjdChjYXBhY2l0eSwgb3JkZXJfb2xkKQoKb3JkZXJfeW91bmczIDwtIGVmYV95b3VuZ19sb2FkaW5ncyAlPiUgCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUgCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JSAKICB0b3BfbigxLCBhYnMobG9hZGluZykpICU+JSAKICB1bmdyb3VwKCkgJT4lIAogIHJvd25hbWVzX3RvX2NvbHVtbigib3JkZXJfeW91bmczIikgJT4lIAogIG11dGF0ZShvcmRlcl95b3VuZzMgPSBhcy5udW1lcmljKG9yZGVyX3lvdW5nMykpICU+JQogIHNlbGVjdChjYXBhY2l0eSwgb3JkZXJfeW91bmczKQoKb3JkZXJfeW91bmcyIDwtIGVmYV95b3VuZ19mb3JjZTJfbG9hZGluZ3MgJT4lIAogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lIAogIGdyb3VwX2J5KGNhcGFjaXR5KSAlPiUgCiAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUgCiAgdW5ncm91cCgpICU+JSAKICByb3duYW1lc190b19jb2x1bW4oIm9yZGVyX3lvdW5nMiIpICU+JSAKICBtdXRhdGUob3JkZXJfeW91bmcyID0gYXMubnVtZXJpYyhvcmRlcl95b3VuZzIpKSAlPiUKICBzZWxlY3QoY2FwYWNpdHksIG9yZGVyX3lvdW5nMikKCm9yZGVyX3lvdW5nMSA8LSBlZmFfeW91bmdfZm9yY2UxX2xvYWRpbmdzICU+JSAKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JSAKICBncm91cF9ieShjYXBhY2l0eSkgJT4lIAogIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lIAogIHVuZ3JvdXAoKSAlPiUgCiAgcm93bmFtZXNfdG9fY29sdW1uKCJvcmRlcl95b3VuZzEiKSAlPiUgCiAgbXV0YXRlKG9yZGVyX3lvdW5nMSA9IGFzLm51bWVyaWMob3JkZXJfeW91bmcxKSkgJT4lCiAgc2VsZWN0KGNhcGFjaXR5LCBvcmRlcl95b3VuZzEpCmBgYAoKYGBge3IgcGxvdCBwcmVwLCBpbmNsdWRlID0gRn0KZmlndXJlMV9kZiA8LSBlZmFfb2xkX2xvYWRpbmdzICU+JSAKICByZW5hbWUob2xkX0JPRFkgPSBmYWN0b3IxLCBvbGRfSEVBUlQgPSBmYWN0b3IyLCBvbGRfTUlORCA9IGZhY3RvcjMpICU+JQogIGZ1bGxfam9pbihlZmFfeW91bmdfbG9hZGluZ3MgJT4lCiAgICAgICAgICAgICAgcmVuYW1lKHlvdW5nX0JPRFkgPSBmYWN0b3IxLCB5b3VuZ19IRUFSVCA9IGZhY3RvcjIsIAogICAgICAgICAgICAgICAgICAgICB5b3VuZ19NSU5EID0gZmFjdG9yMykpICU+JQogIGZ1bGxfam9pbihlZmFfeW91bmdfZm9yY2UyX2xvYWRpbmdzICU+JQogICAgICAgICAgICAgIHJlbmFtZShmb3JjZWQxID0gZmFjdG9yMSwgZm9yY2VkMiA9IGZhY3RvcjIpKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZShmYWN0b3IgPSBmYWN0b3IoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygib2xkX0JPRFkiLCAib2xkX0hFQVJUIiwgIm9sZF9NSU5EIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInlvdW5nX0JPRFkiLCAieW91bmdfSEVBUlQiLCAieW91bmdfTUlORCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JjZWQxIiwgImZvcmNlZDIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjctOXlcbjMtZmFjdG9yczpcbkJPRFkiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjctOXlcbjMtZmFjdG9yczpcbkhFQVJUIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI3LTl5XG4zLWZhY3RvcnM6XG5NSU5EIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0LTZ5XG4zLWZhY3RvcnM6XG5CT0RZIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQtNnlcbjMtZmFjdG9yczpcbkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQtNnlcbjMtZmFjdG9yczpcbk1JTkQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNC02eVxuMi1mYWN0b3JzOlxuQk9EWS1IRUFSVCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0LTZ5XG4yLWZhY3RvcnM6XG5NSU5EIikpKSAlPiUKICBmdWxsX2pvaW4oZF9hbGwgJT4lIGRpc3RpbmN0KGNhcGFjaXR5LCBjYXBXb3JkaW5nKSkgJT4lCiAgIyBtdXRhdGUoY2FwV29yZGluZyA9IGlmZWxzZShncmVwbCgiZmVlbCBzaWNrIiwgY2FwV29yZGluZyksIAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZlZWwgc2ljay4uLiB0aHJvdyB1cCIsIGNhcFdvcmRpbmcpLAogICMgICAgICAgIGNhcFdvcmRpbmcgPSBpZmVsc2UoZ3JlcGwoImZhciBhd2F5IiwgY2FwV29yZGluZyksIAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlbnNlLi4uIGZhciBhd2F5IiwgY2FwV29yZGluZyksCiAgIyAgICAgICAgY2FwV29yZGluZyA9IGlmZWxzZShncmVwbCgiZmlndXJlIG91dCIsIGNhcFdvcmRpbmcpLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaWd1cmUgb3V0Li4uIiwgY2FwV29yZGluZykpICU+JQogIGZ1bGxfam9pbihvcmRlcl9vbGQpICU+JQogIGZ1bGxfam9pbihvcmRlcl95b3VuZzMpICU+JQogIGZ1bGxfam9pbihvcmRlcl95b3VuZzIpICU+JQogIGZ1bGxfam9pbihvcmRlcl95b3VuZzEpCgp2YXJfZGYgPC0gZWZhX29sZF92YXJpYW5jZSAlPiUgCiAgbXV0YXRlKGZhY3RvciA9IHJlY29kZShmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZmFjdG9yMSIgPSAiNy05eVxuMy1mYWN0b3JzOlxuQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZmFjdG9yMiIgPSAiNy05eVxuMy1mYWN0b3JzOlxuSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgImZhY3RvcjMiID0gIjctOXlcbjMtZmFjdG9yczpcbk1JTkQiKSkgJT4lIAogIGZ1bGxfam9pbihlZmFfeW91bmdfdmFyaWFuY2UgJT4lIAogICAgICAgICAgICAgIG11dGF0ZShmYWN0b3IgPSByZWNvZGUoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhY3RvcjEiID0gIjQtNnlcbjMtZmFjdG9yczpcbkJPRFkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhY3RvcjIiID0gIjQtNnlcbjMtZmFjdG9yczpcbkhFQVJUIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmYWN0b3IzIiA9ICI0LTZ5XG4zLWZhY3RvcnM6XG5NSU5EIikpKSAlPiUgCiAgZnVsbF9qb2luKGVmYV95b3VuZ19mb3JjZTJfdmFyaWFuY2UgJT4lIAogICAgICAgICAgICAgIG11dGF0ZShmYWN0b3IgPSByZWNvZGUoZmFjdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhY3RvcjEiID0gIjQtNnlcbjItZmFjdG9yczpcbkJPRFktSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhY3RvcjIiID0gIjQtNnlcbjItZmFjdG9yczpcbk1JTkQiKSkpCmBgYAoKYGBge3IgZWZhX29sZCBwbG90LCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC44fQpmaWd1cmUxX2RmICU+JQogIGZpbHRlcihncmVwbCgiNy05eVxuMy1mYWN0b3JzIiwgZmFjdG9yKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gZmFjdG9yLCB5ID0gcmVvcmRlcihjYXBXb3JkaW5nLCBkZXNjKG9yZGVyX29sZCkpLCBmaWxsID0gbG9hZGluZykpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHJvdW5kMihsb2FkaW5nKSksIHNpemUgPSA1KSArCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gMC41LCB4bWF4ID0gMy41LCB5bWluID0gMC41LCB5bWF4ID0gMjAuNSwKICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMCwgc2l6ZSA9IDAuNikgKwogIGdlb21fdGV4dChkYXRhID0gdmFyX2RmICU+JSBmaWx0ZXIoZ3JlcGwoIjctOXlcbjMtZmFjdG9ycyIsIGZhY3RvcikpLAogICAgICAgICAgICBzaXplID0gNiwKICAgICAgICAgICAgYWVzKHggPSBmYWN0b3IsIHkgPSAwLCBmaWxsID0gTlVMTCwKICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKHJvdW5kKFByb3BvcnRpb24uRXhwbGFpbmVkLCAyKSoxMDAsICIlIikpKSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCAKICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0xLCAxKSwgYnJlYWtzID0gc2VxKC0xLCAxLCAwLjUpLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIodGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJoZWlnaHQgPSAzMCwgYmFyd2lkdGggPSAxKSkgKwogIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwogIGV4cGFuZF9saW1pdHMoeSA9IGMoLTEsIDIxKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh4ID0gIiIpICsKICB0aGVtZSh0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKQpgYGAKCmBgYHtyIGVmYV95b3VuZzMgcGxvdCwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuOH0KZmlndXJlMV9kZiAlPiUKICBmaWx0ZXIoZ3JlcGwoIjQtNnlcbjMtZmFjdG9ycyIsIGZhY3RvcikpICU+JQogIGdncGxvdChhZXMoeCA9IGZhY3RvciwgeSA9IHJlb3JkZXIoY2FwV29yZGluZywgZGVzYyhvcmRlcl95b3VuZzMpKSwgZmlsbCA9IGxvYWRpbmcpKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSByb3VuZDIobG9hZGluZykpLCBzaXplID0gNSkgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IDAuNSwgeG1heCA9IDMuNSwgeW1pbiA9IDAuNSwgeW1heCA9IDIwLjUsCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAsIHNpemUgPSAwLjYpICsKICBnZW9tX3RleHQoZGF0YSA9IHZhcl9kZiAlPiUgZmlsdGVyKGdyZXBsKCI0LTZ5XG4zLWZhY3RvcnMiLCBmYWN0b3IpKSwKICAgICAgICAgICAgc2l6ZSA9IDYsCiAgICAgICAgICAgIGFlcyh4ID0gZmFjdG9yLCB5ID0gMCwgZmlsbCA9IE5VTEwsCiAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMChyb3VuZChQcm9wb3J0aW9uLkV4cGxhaW5lZCwgMikqMTAwLCAiJSIpKSkgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgCiAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMSwgMSksIGJyZWFrcyA9IHNlcSgtMSwgMSwgMC41KSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMzAsIGJhcndpZHRoID0gMSkpICsKICBzY2FsZV94X2Rpc2NyZXRlKHBvc2l0aW9uID0gInRvcCIpICsKICBleHBhbmRfbGltaXRzKHkgPSBjKC0xLCAyMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnMoeCA9ICIiKSArCiAgdGhlbWUodGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgpgYGB7ciBlZmFfeW91bmcyIHBsb3QsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjh9CmZpZ3VyZTFfZGYgJT4lCiAgZmlsdGVyKGdyZXBsKCI0LTZ5XG4yLWZhY3RvcnMiLCBmYWN0b3IpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBmYWN0b3IsIHkgPSByZW9yZGVyKGNhcFdvcmRpbmcsIGRlc2Mob3JkZXJfeW91bmcyKSksIGZpbGwgPSBsb2FkaW5nKSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcm91bmQyKGxvYWRpbmcpKSwgc2l6ZSA9IDUpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSAwLjUsIHhtYXggPSAyLjUsIHltaW4gPSAwLjUsIHltYXggPSAyMC41LAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLCBzaXplID0gMC42KSArCiAgZ2VvbV90ZXh0KGRhdGEgPSB2YXJfZGYgJT4lIGZpbHRlcihncmVwbCgiNC02eVxuMi1mYWN0b3JzIiwgZmFjdG9yKSksCiAgICAgICAgICAgIHNpemUgPSA2LAogICAgICAgICAgICBhZXMoeCA9IGZhY3RvciwgeSA9IDAsIGZpbGwgPSBOVUxMLAogICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAocm91bmQoUHJvcG9ydGlvbi5FeHBsYWluZWQsIDIpKjEwMCwgIiUiKSkpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIAogICAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTEsIDEpLCBicmVha3MgPSBzZXEoLTEsIDEsIDAuNSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcih0aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcmhlaWdodCA9IDMwLCBiYXJ3aWR0aCA9IDEpKSArCiAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiAgZXhwYW5kX2xpbWl0cyh5ID0gYygtMSwgMjEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHggPSAiIikgKwogIHRoZW1lKHRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKIyBQYXJ0aWNpcGFudC1sZXZlbCBhbmFseXNlcwoKYGBge3IgZW5kb3JzZW1lbnRzLCBpbmNsdWRlID0gRn0KZGZfZmFjdG9ycyA8LSBlZmFfb2xkX2xvYWRpbmdzICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KGZhY3RvcikgJT4lCiAgdG9wX24oNiwgYWJzKGxvYWRpbmcpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlKGZhY3RvciA9IHJlY29kZShmYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZmFjdG9yMSIgPSAiQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZmFjdG9yMiIgPSAiSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgImZhY3RvcjMiID0gIk1JTkQiKSkKCmRmX2VuZG9yc2VtZW50cyA8LSBkX2FsbCAlPiUKICBmdWxsX2pvaW4oZGZfZmFjdG9ycykgJT4lCiAgZmlsdGVyKCFpcy5uYShmYWN0b3IpKSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIHN1YmlkLCBjaGFyYWN0ZXIsIGFnZSwgZmFjdG9yKSAlPiUKICBtdXRhdGUoZW5kb3JzZSA9IHJlY29kZShyZXNwb25zZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAibm8iID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAia2luZGEiID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAieWVzIiA9IDEpKSAlPiUKICBzdW1tYXJpc2UodG90YWwgPSBzdW0oZW5kb3JzZSwgbmEucm0gPSBUKSkKCmRmX2VuZG9yc2VtZW50c19kaWZmIDwtIGRmX2VuZG9yc2VtZW50cyAlPiUKICBzcHJlYWQoZmFjdG9yLCB0b3RhbCkgJT4lCiAgbXV0YXRlKEhFQVJUX0JPRFkgPSBIRUFSVCAtIEJPRFksCiAgICAgICAgIE1JTkRfQk9EWSA9IE1JTkQgLSBCT0RZLAogICAgICAgICBNSU5EX0hFQVJUID0gTUlORCAtIEhFQVJUKSAlPiUKICBzZWxlY3QoLWMoQk9EWSwgSEVBUlQsIE1JTkQpKSAlPiUKICBnYXRoZXIoY29tcGFyaXNvbiwgZGlmZiwgYyhIRUFSVF9CT0RZLCBNSU5EX0JPRFksIE1JTkRfSEVBUlQpKSAlPiUKICBtdXRhdGUoY29tcGFyaXNvbiA9IGZhY3Rvcihjb21wYXJpc29uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkgbWludXMgSEVBUlQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1JTkQgbWludXMgQk9EWSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORCBtaW51cyBIRUFSVCIpKSwKICAgICAgICAgZGlmZl9hYnMgPSBhYnMoZGlmZikpCmBgYAoKIyMgQWdlIGdyb3VwIGNvbXBhcmlzb24KCmBgYHtyIHRhYmxlIDEgcHJlcH0KZGlmZl90YWIgPC0gZGZfZW5kb3JzZW1lbnRzX2RpZmYgJT4lCiAgdW5ncm91cCgpICU+JQogICMgbXV0YXRlKGFnZV9ncm91cCA9IGZhY3RvcihhZ2VfZ3JvdXAsIGxhYmVscyA9IGMoIjQtNnkiLCAiNy05eSIpKSwKICAjICAgICAgICBjb21wYXJpc29uID0gZ3N1YigibWludXMiLCAiLSIsIGNvbXBhcmlzb24pKSAlPiUKICBncm91cF9ieShhZ2VfZ3JvdXAsIGNvbXBhcmlzb24pICU+JQogIHN1bW1hcmlzZShuID0gbigpLAogICAgICAgICAgICBtZWRpYW4gPSBtZWRpYW4oZGlmZiksCiAgICAgICAgICAgIG1lYW4gPSBtZWFuKGRpZmYsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHZhcmlhbmNlID0gdmFyKGRpZmYsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHNrZXduZXNzID0gcHN5Y2g6OnNrZXcoZGlmZiksCiAgICAgICAgICAgIGt1cnRvc2lzID0gcHN5Y2g6Omt1cnRvc2koZGlmZikpICU+JQogIG11dGF0ZV9hdCh2YXJzKG1lYW4sIHZhcmlhbmNlLCBza2V3bmVzcywga3VydG9zaXMpLCBmdW5zKHJvdW5kMikpICU+JQogICMgbXV0YXRlKGNvbXBhcmlzb24gPSBmYWN0b3IoY29tcGFyaXNvbiwKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIkJPRFkgbWludXMgSEVBUlQiLCAKICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJPRFkgbWludXMgTUlORCIsIAogICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTUlORCBtaW51cyBIRUFSVCIpKSkgJT4lCiAgdW5ncm91cCgpICU+JSAKICBhcnJhbmdlKGNvbXBhcmlzb24sIGFnZV9ncm91cCkgJT4lCiAgc2VsZWN0KGNvbXBhcmlzb24sIGFnZV9ncm91cCwgbiwgbWVkaWFuLCBtZWFuLCB2YXJpYW5jZSwgc2tld25lc3MsIGt1cnRvc2lzKSAlPiUKICBkYXRhLmZyYW1lKCkKYGBgCgpgYGB7ciBUYWJsZSAxIHByZXB9CiMgd2lsY294b24gdGVzdHMKdzEgPC0gd2lsY294LnRlc3QoZGlmZiB+IGFnZV9ncm91cCwgZGZfZW5kb3JzZW1lbnRzX2RpZmYgJT4lIGZpbHRlcihjb21wYXJpc29uID09ICJCT0RZIG1pbnVzIEhFQVJUIikpCncyIDwtIHdpbGNveC50ZXN0KGRpZmYgfiBhZ2VfZ3JvdXAsIGRmX2VuZG9yc2VtZW50c19kaWZmICU+JSBmaWx0ZXIoY29tcGFyaXNvbiA9PSAiTUlORCBtaW51cyBCT0RZIikpCnczIDwtIHdpbGNveC50ZXN0KGRpZmYgfiBhZ2VfZ3JvdXAsIGRmX2VuZG9yc2VtZW50c19kaWZmICU+JSBmaWx0ZXIoY29tcGFyaXNvbiA9PSAiTUlORCBtaW51cyBIRUFSVCIpKQoKIyB3ZWxjaCdzIHRlc3RzCnQxIDwtIHQudGVzdChkaWZmIH4gYWdlX2dyb3VwLCBkZl9lbmRvcnNlbWVudHNfZGlmZiAlPiUgZmlsdGVyKGNvbXBhcmlzb24gPT0gIkJPRFkgbWludXMgSEVBUlQiKSkKdDIgPC0gdC50ZXN0KGRpZmYgfiBhZ2VfZ3JvdXAsIGRmX2VuZG9yc2VtZW50c19kaWZmICU+JSBmaWx0ZXIoY29tcGFyaXNvbiA9PSAiTUlORCBtaW51cyBCT0RZIikpCnQzIDwtIHQudGVzdChkaWZmIH4gYWdlX2dyb3VwLCBkZl9lbmRvcnNlbWVudHNfZGlmZiAlPiUgZmlsdGVyKGNvbXBhcmlzb24gPT0gIk1JTkQgbWludXMgSEVBUlQiKSkKCiMgYmFydGxldHQncyB0ZXN0cwprc3ExIDwtIGJhcnRsZXR0LnRlc3QoZGlmZiB+IGFnZV9ncm91cCwgZGZfZW5kb3JzZW1lbnRzX2RpZmYgJT4lIGZpbHRlcihjb21wYXJpc29uID09ICJCT0RZIG1pbnVzIEhFQVJUIikpCmtzcTIgPC0gYmFydGxldHQudGVzdChkaWZmIH4gYWdlX2dyb3VwLCBkZl9lbmRvcnNlbWVudHNfZGlmZiAlPiUgZmlsdGVyKGNvbXBhcmlzb24gPT0gIk1JTkQgbWludXMgQk9EWSIpKQprc3EzIDwtIGJhcnRsZXR0LnRlc3QoZGlmZiB+IGFnZV9ncm91cCwgZGZfZW5kb3JzZW1lbnRzX2RpZmYgJT4lIGZpbHRlcihjb21wYXJpc29uID09ICJNSU5EIG1pbnVzIEhFQVJUIikpCgpkaWZmdGVzdHNfdGFiIDwtIGRhdGEuZnJhbWUoZ3JvdXAgPSBjKCJCLUgiLCAiTS1CIiwgIk0tSCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVyA9IGModzEkc3RhdGlzdGljLCB3MiRzdGF0aXN0aWMsIHczJHN0YXRpc3RpYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcCA9IGModzEkcC52YWx1ZSwgdzIkcC52YWx1ZSwgdzMkcC52YWx1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gYyh0MSRzdGF0aXN0aWMsIHQyJHN0YXRpc3RpYywgdDMkc3RhdGlzdGljKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwID0gYyh0MSRwLnZhbHVlLCB0MiRwLnZhbHVlLCB0MyRwLnZhbHVlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsyID0gYyhrc3ExJHN0YXRpc3RpYywga3NxMiRzdGF0aXN0aWMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtzcTMkc3RhdGlzdGljKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEsycCA9IGMoa3NxMSRwLnZhbHVlLCBrc3EyJHAudmFsdWUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrc3EzJHAudmFsdWUpKSAlPiUKICBtdXRhdGVfYXQodmFycygtZ3JvdXApLCBmdW5zKHJvdW5kMikpCgpuYW1lcyhkaWZmdGVzdHNfdGFiKSA8LSBjKCIiLCAiVyIsICJwIiwgInQiLCAicCIsICJLXjIiLCAicCIpCmBgYAoKYGBge3J9CmRmX2VuZG9yc2VtZW50c19kaWZmICU+JSAKICBncm91cF9ieShjb21wYXJpc29uLCBhZ2VfZ3JvdXApICU+JSAKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oZGlmZiksCiAgICAgICAgICAgIHZhciA9IHZhcihkaWZmKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnModmFyLCBtZWFuKSwgZnVucyguICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5tYWxsID0gMikpKQpgYGAKCmBgYHtyIGVuZG9yc2VtZW50cyBwbG90LCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC42N30KZ2dwbG90KGRmX2VuZG9yc2VtZW50c19kaWZmICU+JQogICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgIG11dGF0ZShhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNoaWxkcmVuXzc5IiwgImNoaWxkcmVuXzQ2IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiNy05eSIsICI0LTZ5IikpKSwKICAgICAgIGFlcyh4ID0gZGlmZiwgZmlsbCA9IGFnZV9ncm91cCwgY29sb3IgPSBhZ2VfZ3JvdXApKSArCiAgZmFjZXRfZ3JpZChhZ2VfZ3JvdXAgfiBjb21wYXJpc29uKSArCiAgZ2VvbV9iYXIocG9zaXRpb24gPSBwb3NpdGlvbl9pZGVudGl0eSgpLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDAuNSkgKwogIGdlb21fdmxpbmUoeGludGVyY2VwdCA9IDAsIGx0eSA9IDIpICsKICBnZW9tX3RleHQoZGF0YSA9IGRpZmZfdGFiICU+JSAKICAgICAgICAgICAgICBtdXRhdGUoYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNoaWxkcmVuXzc5IiwgImNoaWxkcmVuXzQ2IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiNy05eSIsICI0LTZ5IikpKSwgCiAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlKCJNID0iLCBtZWFuKSksCiAgICAgICAgICAgIHggPSAtNywgeSA9IDQyLCBoanVzdCA9IDAsIHZqdXN0ID0gMCwgc2l6ZSA9IDcpICsKICBnZW9tX3RleHQoZGF0YSA9IGRpZmZfdGFiICU+JSAKICAgICAgICAgICAgICBtdXRhdGUoYWdlX2dyb3VwID0gZmFjdG9yKGFnZV9ncm91cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNoaWxkcmVuXzc5IiwgImNoaWxkcmVuXzQ2IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiNy05eSIsICI0LTZ5IikpKSwgCiAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlKCJzID0iLCB2YXJpYW5jZSkpLAogICAgICAgICAgICB4ID0gNywgeSA9IDQyLCBoanVzdCA9IDEsIHZqdXN0ID0gMCwgc2l6ZSA9IDcpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoIkRpZmZlcmVuY2UgYmV0d2VlbiBjYXRlZ29yaWVzIiwgCiAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTcsIDcpLCBicmVha3MgPSBzZXEoLTYsIDYsIDIpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJOdW1iZXIgb2YgcGFydGljaXBhbnRzIiwgYnJlYWtzID0gc2VxKDAsIDEwMCwgMTApKSArCiAgc2NhbGVfZmlsbF9tYW51YWwoIkFnZSBncm91cCIsCiAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gYygiIzdmYmY3YiIsICIjYWY4ZGMzIikpICsKICBzY2FsZV9jb2xvcl9tYW51YWwoIkFnZSBncm91cCIsIAogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjMDA4ODM3IiwgIiM3YjMyOTQiKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgZ3VpZGVzKGZpbGwgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChhbHBoYSA9IDEpKSwKICAgICAgICAgY29sb3IgPSBndWlkZV9sZWdlbmQob3ZlcnJpZGUuYWVzID0gbGlzdChzaXplID0gMSkpKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IE5BKSwKICAgICAgICBwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpKQpgYGAKCiMjIFRoaW5raW5nIGNvbnRpbnVvdXNseQoKYGBge3J9CmNvbnRyYXN0cyhkZl9lbmRvcnNlbWVudHNfZGlmZiRjb21wYXJpc29uKSA8LSBjYmluZChCSF9HTSA9IGMoMSwgMCwgLTEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUJfR00gPSBjKDAsIDEsIC0xKSkKYGBgCgpgYGB7cn0Kcl9yYXdfYWxsIDwtIGxtZXIoZGlmZiB+IGNvbXBhcmlzb24gKiBzY2FsZShhZ2UsIHNjYWxlID0gRikgKyAoMXxzdWJpZCksCiAgICAgICAgICAgICAgICAgIGRmX2VuZG9yc2VtZW50c19kaWZmKQpzdW1tYXJ5KHJfcmF3X2FsbCkKCnJfcmF3X0JIIDwtIGxtKGRpZmYgfiBzY2FsZShhZ2UsIHNjYWxlID0gRiksCiAgICAgICAgICAgICAgIGRmX2VuZG9yc2VtZW50c19kaWZmICU+JSBmaWx0ZXIoY29tcGFyaXNvbiA9PSAiQk9EWSBtaW51cyBIRUFSVCIpKQpzdW1tYXJ5KHJfcmF3X0JIKQoKcl9yYXdfTUIgPC0gbG0oZGlmZiB+IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSwKICAgICAgICAgICAgICAgZGZfZW5kb3JzZW1lbnRzX2RpZmYgJT4lIGZpbHRlcihjb21wYXJpc29uID09ICJNSU5EIG1pbnVzIEJPRFkiKSkKc3VtbWFyeShyX3Jhd19NQikKCnJfcmF3X01IIDwtIGxtKGRpZmYgfiBzY2FsZShhZ2UsIHNjYWxlID0gRiksCiAgICAgICAgICAgICAgIGRmX2VuZG9yc2VtZW50c19kaWZmICU+JSBmaWx0ZXIoY29tcGFyaXNvbiA9PSAiTUlORCBtaW51cyBIRUFSVCIpKQpzdW1tYXJ5KHJfcmF3X01IKQoKcmVncmVzc2lvbnNfcmF3IDwtIGRhdGEuZnJhbWUoc3VtbWFyeShyX3Jhd19CSCkkY29lZmZpY2llbnRzKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtIikgJT4lCiAgbXV0YXRlKGNvbXBhcmlzb24gPSAiQk9EWSBtaW51cyBIRUFSVCIpICU+JQogIGZ1bGxfam9pbihkYXRhLmZyYW1lKHN1bW1hcnkocl9yYXdfTUIpJGNvZWZmaWNpZW50cykgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbSIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShjb21wYXJpc29uID0gIk1JTkQgbWludXMgQk9EWSIpKSAlPiUKICBmdWxsX2pvaW4oZGF0YS5mcmFtZShzdW1tYXJ5KHJfcmF3X01IKSRjb2VmZmljaWVudHMpICU+JQogICAgICAgICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW0iKSAlPiUKICAgICAgICAgICAgICBtdXRhdGUoY29tcGFyaXNvbiA9ICJNSU5EIG1pbnVzIEhFQVJUIikpCmBgYAoKYGBge3J9CnJfYWJzX2FsbCA8LSBsbWVyKGRpZmZfYWJzIH4gY29tcGFyaXNvbiAqIHNjYWxlKGFnZSwgc2NhbGUgPSBGKSArICgxfHN1YmlkKSwKICAgICAgICAgICAgICAgICAgZGZfZW5kb3JzZW1lbnRzX2RpZmYpCnN1bW1hcnkocl9hYnNfYWxsKQoKcl9hYnNfQkggPC0gbG0oZGlmZl9hYnMgfiBzY2FsZShhZ2UsIHNjYWxlID0gRiksCiAgICAgICAgICAgICAgIGRmX2VuZG9yc2VtZW50c19kaWZmICU+JSBmaWx0ZXIoY29tcGFyaXNvbiA9PSAiQk9EWSBtaW51cyBIRUFSVCIpKQpzdW1tYXJ5KHJfYWJzX0JIKQoKcl9hYnNfTUIgPC0gbG0oZGlmZl9hYnMgfiBzY2FsZShhZ2UsIHNjYWxlID0gRiksCiAgICAgICAgICAgICAgIGRmX2VuZG9yc2VtZW50c19kaWZmICU+JSBmaWx0ZXIoY29tcGFyaXNvbiA9PSAiTUlORCBtaW51cyBCT0RZIikpCnN1bW1hcnkocl9hYnNfTUIpCgpyX2Fic19NSCA8LSBsbShkaWZmX2FicyB+IHNjYWxlKGFnZSwgc2NhbGUgPSBGKSwKICAgICAgICAgICAgICAgZGZfZW5kb3JzZW1lbnRzX2RpZmYgJT4lIGZpbHRlcihjb21wYXJpc29uID09ICJNSU5EIG1pbnVzIEhFQVJUIikpCnN1bW1hcnkocl9hYnNfTUgpCgpyZWdyZXNzaW9uc19hYnMgPC0gZGF0YS5mcmFtZShzdW1tYXJ5KHJfYWJzX0JIKSRjb2VmZmljaWVudHMpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW0iKSAlPiUKICBtdXRhdGUoY29tcGFyaXNvbiA9ICJCT0RZIG1pbnVzIEhFQVJUIikgJT4lCiAgZnVsbF9qb2luKGRhdGEuZnJhbWUoc3VtbWFyeShyX2Fic19NQikkY29lZmZpY2llbnRzKSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtIikgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKGNvbXBhcmlzb24gPSAiTUlORCBtaW51cyBCT0RZIikpICU+JQogIGZ1bGxfam9pbihkYXRhLmZyYW1lKHN1bW1hcnkocl9hYnNfTUgpJGNvZWZmaWNpZW50cykgJT4lCiAgICAgICAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbSIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShjb21wYXJpc29uID0gIk1JTkQgbWludXMgSEVBUlQiKSkKYGBgCgpgYGB7cn0KcmVncmVzc2lvbnNfYWxsIDwtIGZ1bGxfam9pbihyZWdyZXNzaW9uc19yYXcgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRlKGRpZmZfdHlwZSA9ICJyYXcgZGlmZmVyZW5jZSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ3Jlc3Npb25zX2FicyAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGF0ZShkaWZmX3R5cGUgPSAiYWJzb2x1dGUgZGlmZmVyZW5jZSIpKSAlPiUKICBmaWx0ZXIocGFyYW0gPT0gInNjYWxlKGFnZSwgc2NhbGUgPSBGKSIpICU+JQogIHNlbGVjdCgtcGFyYW0pICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsCiAgICAgICAgIGJfc2UgPSBTdGQuLkVycm9yLAogICAgICAgICB0ID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycyhiLCBiX3NlLCB0KSwKICAgICAgICAgICAgZnVucyguICU+JSByb3VuZCgyKSAlPiUgZm9ybWF0KG5zbWFsbCA9IDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAicCA8IDAuMDAxIiwKICAgICAgICAgICAgICAgICAgICBwYXN0ZTAoInAgPSAiLCBmb3JtYXQocm91bmQocCwgMyksIG5zbWFsbCA9IDMpKSksCiAgICAgICAgIGRpZmZfdHlwZSA9IGZhY3RvcihkaWZmX3R5cGUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygicmF3IGRpZmZlcmVuY2UiLCAiYWJzb2x1dGUgZGlmZmVyZW5jZSIpKSkKYGBgCgpgYGB7ciBlbmRvcnNlbWVudHMgcGxvdCBjb250aW51b3VzLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC43NX0KZ2dwbG90KGRmX2VuZG9yc2VtZW50c19kaWZmICU+JQogICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgIG11dGF0ZShhZ2VfZ3JvdXAgPSBmYWN0b3IoYWdlX2dyb3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoImNoaWxkcmVuXzc5IiwgImNoaWxkcmVuXzQ2IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiNy05eSIsICI0LTZ5IikpKSAlPiUKICAgICAgICAgZ2F0aGVyKGRpZmZfdHlwZSwgZGlmZl9kZWcsIGMoZGlmZiwgZGlmZl9hYnMpKSAlPiUKICAgICAgICAgbXV0YXRlKGRpZmZfdHlwZSA9IGZhY3RvcihkaWZmX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygiZGlmZiIsICJkaWZmX2FicyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoInJhdyBkaWZmZXJlbmNlIiwgImFic29sdXRlIGRpZmZlcmVuY2UiKSkpLAogICAgICAgYWVzKHggPSBhZ2UsIHkgPSBkaWZmX2RlZywgZmlsbCA9IGFnZV9ncm91cCwgY29sb3IgPSBhZ2VfZ3JvdXApKSArCiAgZmFjZXRfZ3JpZChkaWZmX3R5cGUgfiBjb21wYXJpc29uLCBzY2FsZSA9ICJmcmVlIikgKwogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGx0eSA9IDIpICsKICBnZW9tX2ppdHRlcihoZWlnaHQgPSAwLjI1LCB3aWR0aCA9IDApICsKICBnZW9tX3Ntb290aChhZXMoZ3JvdXAgPSBjb21wYXJpc29uKSwgbWV0aG9kID0gImxtIiwKICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZpbGwgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUpICsKICBnZW9tX3RleHQoZGF0YSA9IHJlZ3Jlc3Npb25zX2FsbCwKICAgICAgICAgICAgYWVzKGxhYmVsID0gcGFzdGUwKCJiID0gIiwgYiwgIiwgIiwgcCksIGNvbG9yID0gTkEsIGZpbGwgPSBOQSksCiAgICAgICAgICAgIHggPSA0LCB5ID0gNiwgY29sb3IgPSAiYmxhY2siLCBoanVzdCA9IDAsIHZqdXN0ID0gMSwgc2l6ZSA9IDYpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoIkV4YWN0IGFnZSBpbiB5ZWFycyIsIGJyZWFrcyA9IHNlcSgwLCAxMDAsIDEpKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJEaWZmZXJlbmNlIGJldHdlZW4gY2F0ZWdvcmllcyIsCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IHNlcSgtNiwgNiwgMikpICsKICBzY2FsZV9maWxsX21hbnVhbCgiQWdlIGdyb3VwIiwKICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCIjN2ZiZjdiIiwgIiNhZjhkYzMiKSkgKwogIHNjYWxlX2NvbG9yX21hbnVhbCgiQWdlIGdyb3VwIiwgCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGMoIiMwMDg4MzciLCAiIzdiMzI5NCIpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBndWlkZXMoZmlsbCA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KGFscGhhID0gMSkpLAogICAgICAgICBjb2xvciA9IGd1aWRlX2xlZ2VuZChvdmVycmlkZS5hZXMgPSBsaXN0KHNpemUgPSAxKSkpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpLAogICAgICAgIHBhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChmaWxsID0gTkEpLAogICAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCkpICAKYGBgCgojIFN1cHBsZW1lbnRhbCBzbGlkZXMKCiMjIDMgYWdlIGdyb3VwcwoKYGBge3J9CiMgc3BsaXQgZGF0YQpkX3RlcmNpbGVzIDwtIGRfYWxsICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgbXV0YXRlKHRlcmNpbGUgPSBudGlsZShhZ2UsIDMpKSAlPiUKICBzZWxlY3Qoc3ViaWQsIGFnZSwgdGVyY2lsZSwgY2FwYWNpdHksIHJlc3BvbnNlTnVtKSAlPiUKICBzcHJlYWQoY2FwYWNpdHksIHJlc3BvbnNlTnVtKQoKZF90ZXJjaWxlX3lvdW5nIDwtIGRfdGVyY2lsZXMgJT4lIAogIGZpbHRlcih0ZXJjaWxlID09IDEpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygic3ViaWQiKSAlPiUKICBzZWxlY3QoLXRlcmNpbGUsIC1hZ2UpCgpkX3RlcmNpbGVfbWlkIDwtIGRfdGVyY2lsZXMgJT4lIAogIGZpbHRlcih0ZXJjaWxlID09IDIpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygic3ViaWQiKSAlPiUKICBzZWxlY3QoLXRlcmNpbGUsIC1hZ2UpCgpkX3RlcmNpbGVfb2xkIDwtIGRfdGVyY2lsZXMgJT4lIAogIGZpbHRlcih0ZXJjaWxlID09IDMpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygic3ViaWQiKSAlPiUKICBzZWxlY3QoLXRlcmNpbGUsIC1hZ2UpCmBgYAoKYGBge3J9CmRfdGVyY2lsZXMgJT4lIAogIGRpc3RpbmN0KHRlcmNpbGUsIHN1YmlkLCBhZ2UpICU+JSAKICBncm91cF9ieSh0ZXJjaWxlKSAlPiUgCiAgc3VtbWFyaXNlKG4gPSBuKCksCiAgICAgICAgICAgIG1pbiA9IG1pbihhZ2UpLAogICAgICAgICAgICBtYXggPSBtYXgoYWdlKSwKICAgICAgICAgICAgbWVhbiA9IG1lYW4oYWdlKSwKICAgICAgICAgICAgbWVkaWFuID0gbWVkaWFuKGFnZSkpCmBgYAoKCmBgYHtyfQojIGRvIEVGQXMKZWZhX3RlcmNpbGVfeW91bmcgPC0gcHN5Y2g6OmZhKGRfdGVyY2lsZV95b3VuZywgbmZhY3RvcnMgPSAzLCAjbi5pdGVyID0gbl9pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yID0gY2hvc2VuX2Nvciwgcm90ID0gY2hvc2VuX3JvdCkgJT4lIGZhLnNvcnQoKQplZmFfdGVyY2lsZV9taWQgPC0gcHN5Y2g6OmZhKGRfdGVyY2lsZV9taWQsIG5mYWN0b3JzID0gMywgI24uaXRlciA9IG5faXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3IgPSBjaG9zZW5fY29yLCByb3QgPSBjaG9zZW5fcm90KSAlPiUgZmEuc29ydCgpCmVmYV90ZXJjaWxlX29sZCA8LSBwc3ljaDo6ZmEoZF90ZXJjaWxlX29sZCwgbmZhY3RvcnMgPSAzLCAjbi5pdGVyID0gbl9pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvciA9IGNob3Nlbl9jb3IsIHJvdCA9IGNob3Nlbl9yb3QpICU+JSBmYS5zb3J0KCkKCm9yZGVyX3RlcmNpbGVfeW91bmcgPC0gZWZhX3RlcmNpbGVfeW91bmckbG9hZGluZ3NbXSAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJjYXBhY2l0eSIpICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGFicyhsb2FkaW5nKSkpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigib3JkZXJfeW91bmciKSAlPiUKICBtdXRhdGUob3JkZXJfeW91bmcgPSBhcy5udW1lcmljKG9yZGVyX3lvdW5nKSkgJT4lCiAgc2VsZWN0KG9yZGVyX3lvdW5nLCBjYXBhY2l0eSkKCm9yZGVyX3RlcmNpbGVfbWlkIDwtIGVmYV90ZXJjaWxlX21pZCRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgYXJyYW5nZShmYWN0b3IsIGRlc2MoYWJzKGxvYWRpbmcpKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJvcmRlcl9taWQiKSAlPiUKICBtdXRhdGUob3JkZXJfbWlkID0gYXMubnVtZXJpYyhvcmRlcl9taWQpKSAlPiUKICBzZWxlY3Qob3JkZXJfbWlkLCBjYXBhY2l0eSkKCm9yZGVyX3RlcmNpbGVfb2xkIDwtIGVmYV90ZXJjaWxlX29sZCRsb2FkaW5nc1tdICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICBncm91cF9ieShjYXBhY2l0eSkgJT4lCiAgdG9wX24oMSwgYWJzKGxvYWRpbmcpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgYXJyYW5nZShmYWN0b3IsIGRlc2MoYWJzKGxvYWRpbmcpKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJvcmRlcl9vbGQiKSAlPiUKICBtdXRhdGUob3JkZXJfb2xkID0gYXMubnVtZXJpYyhvcmRlcl9vbGQpKSAlPiUKICBzZWxlY3Qob3JkZXJfb2xkLCBjYXBhY2l0eSkKCmVmYV90ZXJjaWxlX2xvYWRpbmdzIDwtIGVmYV90ZXJjaWxlX3lvdW5nJGxvYWRpbmdzW10gJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigiY2FwYWNpdHkiKSAlPiUKICBnYXRoZXIoZmFjdG9yLCBsb2FkaW5nLCAtY2FwYWNpdHkpICU+JQogIG11dGF0ZSh0ZXJjaWxlID0gInlvdW5nIikgJT4lCiAgZnVsbF9qb2luKGVmYV90ZXJjaWxlX21pZCRsb2FkaW5nc1tdICU+JQogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICAgICAgICAgICAgICBtdXRhdGUodGVyY2lsZSA9ICJtaWQiKSkgJT4lCiAgZnVsbF9qb2luKGVmYV90ZXJjaWxlX29sZCRsb2FkaW5nc1tdICU+JQogICAgICAgICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICAgICAgICByb3duYW1lc190b19jb2x1bW4oImNhcGFjaXR5IikgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKGZhY3RvciwgbG9hZGluZywgLWNhcGFjaXR5KSAlPiUKICAgICAgICAgICAgICBtdXRhdGUodGVyY2lsZSA9ICJvbGQiKSkgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3RlcmNpbGVfeW91bmcpICU+JQogIGZ1bGxfam9pbihvcmRlcl90ZXJjaWxlX21pZCkgJT4lCiAgZnVsbF9qb2luKG9yZGVyX3RlcmNpbGVfb2xkKSAlPiUKICBtdXRhdGUodGVyY2lsZSA9IGZhY3Rvcih0ZXJjaWxlLCBsZXZlbHMgPSBjKCJ5b3VuZyIsICJtaWQiLCAib2xkIikpKQpgYGAKCmBgYHtyIHRlcmNpbGVfeW91bmcgcGxvdCwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmdncGxvdChlZmFfdGVyY2lsZV9sb2FkaW5ncyAlPiUgZmlsdGVyKHRlcmNpbGUgPT0gInlvdW5nIiksCiAgICAgICBhZXMoeCA9IGZhY3RvciwKICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhvcmRlcl95b3VuZykpLAogICAgICAgICAgIGZpbGwgPSBsb2FkaW5nKSkgKwogIGdlb21fdGlsZShjb2xvciA9ICJibGFjayIpICsKICBnZW9tX3RleHQoYWVzKGxhYmVsID0gcm91bmQyKGxvYWRpbmcpKSwgc2l6ZSA9IDUpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSAwLjUsIHhtYXggPSAzLjUsIHltaW4gPSAwLjUsIHltYXggPSAyMC41LAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLCBzaXplID0gMC42KSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCAKICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0xLCAxKSwgYnJlYWtzID0gc2VxKC0xLCAxLCAwLjUpLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIodGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJoZWlnaHQgPSAyMCwgYmFyd2lkdGggPSAxKSkgKwogIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwogICMgZXhwYW5kX2xpbWl0cyh5ID0gYygtMSwgMjEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHggPSAiIikgKwogIHRoZW1lKHRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiAgICAgICAgIyBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDAsIHZqdXN0ID0gMCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKYGBge3IgdGVyY2lsZV9taWQgcGxvdCwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDF9CmdncGxvdChlZmFfdGVyY2lsZV9sb2FkaW5ncyAlPiUgZmlsdGVyKHRlcmNpbGUgPT0gIm1pZCIpLAogICAgICAgYWVzKHggPSBmYWN0b3IsCiAgICAgICAgICAgeSA9IHJlb3JkZXIoY2FwYWNpdHksIGRlc2Mob3JkZXJfbWlkKSksCiAgICAgICAgICAgZmlsbCA9IGxvYWRpbmcpKSArCiAgZ2VvbV90aWxlKGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSByb3VuZDIobG9hZGluZykpLCBzaXplID0gNSkgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IDAuNSwgeG1heCA9IDMuNSwgeW1pbiA9IDAuNSwgeW1heCA9IDIwLjUsCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAsIHNpemUgPSAwLjYpICsKICBzY2FsZV9maWxsX2Rpc3RpbGxlcihwYWxldHRlID0gIlJkWWxCdSIsIAogICAgICAgICAgICAgICAgICAgICAgIGxpbWl0cyA9IGMoLTEsIDEpLCBicmVha3MgPSBzZXEoLTEsIDEsIDAuNSksCiAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcih0aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcmhlaWdodCA9IDIwLCBiYXJ3aWR0aCA9IDEpKSArCiAgc2NhbGVfeF9kaXNjcmV0ZShwb3NpdGlvbiA9ICJ0b3AiKSArCiAgIyBleHBhbmRfbGltaXRzKHkgPSBjKC0xLCAyMSkpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIGxhYnMoeCA9ICIiKSArCiAgdGhlbWUodGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLAogICAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDI0KSwKICAgICAgICAjIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMCwgdmp1c3QgPSAwKSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgcGFuZWwuZ3JpZCA9IGVsZW1lbnRfYmxhbmsoKSkKYGBgCgpgYGB7ciB0ZXJjaWxlX29sZCBwbG90LCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMX0KZ2dwbG90KGVmYV90ZXJjaWxlX2xvYWRpbmdzICU+JSBmaWx0ZXIodGVyY2lsZSA9PSAib2xkIiksCiAgICAgICBhZXMoeCA9IGZhY3RvciwKICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhvcmRlcl9vbGQpKSwKICAgICAgICAgICBmaWxsID0gbG9hZGluZykpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHJvdW5kMihsb2FkaW5nKSksIHNpemUgPSA1KSArCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gMC41LCB4bWF4ID0gMy41LCB5bWluID0gMC41LCB5bWF4ID0gMjAuNSwKICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMCwgc2l6ZSA9IDAuNikgKwogIHNjYWxlX2ZpbGxfZGlzdGlsbGVyKHBhbGV0dGUgPSAiUmRZbEJ1IiwgCiAgICAgICAgICAgICAgICAgICAgICAgbGltaXRzID0gYygtMSwgMSksIGJyZWFrcyA9IHNlcSgtMSwgMSwgMC41KSwKICAgICAgICAgICAgICAgICAgICAgICBndWlkZSA9IGd1aWRlX2NvbG9yYmFyKHRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFyaGVpZ2h0ID0gMjAsIGJhcndpZHRoID0gMSkpICsKICBzY2FsZV94X2Rpc2NyZXRlKHBvc2l0aW9uID0gInRvcCIpICsKICAjIGV4cGFuZF9saW1pdHMoeSA9IGMoLTEsIDIxKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh4ID0gIiIpICsKICB0aGVtZSh0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMjQpLAogICAgICAgICMgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAwLCB2anVzdCA9IDApLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKQpgYGAKCmBgYHtyIHRlcmNpbGVfYWxsIHBsb3QsIGZpZy53aWR0aCA9IDgsIGZpZy5hc3AgPSAwLjd9CmdncGxvdChlZmFfdGVyY2lsZV9sb2FkaW5ncywKICAgICAgIGFlcyh4ID0gaW50ZXJhY3Rpb24oZmFjdG9yLCB0ZXJjaWxlKSwKICAgICAgICAgICB5ID0gcmVvcmRlcihjYXBhY2l0eSwgZGVzYyhvcmRlcl9vbGQpKSwKICAgICAgICAgICBmaWxsID0gbG9hZGluZykpICsKICBnZW9tX3RpbGUoY29sb3IgPSAiYmxhY2siKSArCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHJvdW5kMihsb2FkaW5nKSksIHNpemUgPSA1KSArCiAgYW5ub3RhdGUoInJlY3QiLCB4bWluID0gMC41LCB4bWF4ID0gMy41LCB5bWluID0gMC41LCB5bWF4ID0gMjAuNSwKICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMCwgc2l6ZSA9IDAuNikgKwogIGFubm90YXRlKCJyZWN0IiwgeG1pbiA9IDMuNSwgeG1heCA9IDYuNSwgeW1pbiA9IDAuNSwgeW1heCA9IDIwLjUsCiAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAsIHNpemUgPSAwLjYpICsKICBhbm5vdGF0ZSgicmVjdCIsIHhtaW4gPSA2LjUsIHhtYXggPSA5LjUsIHltaW4gPSAwLjUsIHltYXggPSAyMC41LAogICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLCBzaXplID0gMC42KSArCiAgc2NhbGVfZmlsbF9kaXN0aWxsZXIocGFsZXR0ZSA9ICJSZFlsQnUiLCAKICAgICAgICAgICAgICAgICAgICAgICBsaW1pdHMgPSBjKC0xLCAxKSwgYnJlYWtzID0gc2VxKC0xLCAxLCAwLjUpLAogICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIodGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJoZWlnaHQgPSAzMCwgYmFyd2lkdGggPSAxKSkgKwogIHNjYWxlX3hfZGlzY3JldGUocG9zaXRpb24gPSAidG9wIikgKwogICMgZXhwYW5kX2xpbWl0cyh5ID0gYygtMSwgMjEpKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICBsYWJzKHggPSAiIikgKwogIHRoZW1lKHRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSwKICAgICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAyNCksCiAgICAgICAgIyBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDAsIHZqdXN0ID0gMCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF9ibGFuaygpLAogICAgICAgIHBhbmVsLmdyaWQgPSBlbGVtZW50X2JsYW5rKCkpCmBgYAoKCiMjIEF0dHJpYnV0aW9ucwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjc1fQplZmFfb2xkX2xvYWRpbmdzICU+JQogIGdhdGhlcihmYWN0b3IsIGxvYWRpbmcsIC1jYXBhY2l0eSkgJT4lCiAgZ3JvdXBfYnkoY2FwYWNpdHkpICU+JQogIHRvcF9uKDEsIGFicyhsb2FkaW5nKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGFycmFuZ2UoZmFjdG9yLCBkZXNjKGFicyhsb2FkaW5nKSkpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigib3JkZXIiKSAlPiUKICBtdXRhdGUob3JkZXIgPSBhcy5udW1lcmljKG9yZGVyKSkgJT4lCiAgc2VsZWN0KC1sb2FkaW5nKSAlPiUKICBmdWxsX2pvaW4oZF9hbGwpICU+JQogIGdyb3VwX2J5KGFnZV9ncm91cCwgY2hhcmFjdGVyLCBmYWN0b3IsIGNhcGFjaXR5LCBvcmRlcikgJT4lCiAgZG8oZGF0YS5mcmFtZShyYmluZChzbWVhbi5jbC5ib290KC4kcmVzcG9uc2VOdW0pKSkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUoY2hhcmFjdGVyID0gZmFjdG9yKGdzdWIoIl8iLCAiICIsIGNoYXJhY3RlciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJkb2xsIiwgInRlZGR5IGJlYXIiLCAicm9ib3QiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXB1dGVyIiwgImJlZXRsZSIsICJiaXJkIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb3VzZSIsICJnb2F0IiwgImVsZXBoYW50IikpKSAlPiUKICBnZ3Bsb3QoYWVzKHkgPSBNZWFuLCB4ID0gcmVvcmRlcihnc3ViKCJfIiwgIiAiLCBjYXBhY2l0eSksIG9yZGVyKSwKICAgICAgICAgICAgIGNvbG9yID0gZmFjdG9yLCBhbHBoYSA9IGFnZV9ncm91cCwgc2hhcGUgPSBhZ2VfZ3JvdXApKSArCiAgZmFjZXRfd3JhcCh+IGNoYXJhY3RlciwgbmNvbCA9IDMpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHltaW4gPSBMb3dlciwgeW1heCA9IFVwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOCkpICsKICBzY2FsZV94X2Rpc2NyZXRlKCIiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKCJNZWFuIHJlc3BvbnNlIiwgCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMCwgMC41LCAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjAgKG5vKSIsICIwLjUgKGtpbmRhKSIsICIxICh5ZXMpIikpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIoIkZhY3RvciIsIHBhbGV0dGUgPSAiU2V0MSIsIAogICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCJCT0RZIiwgIkhFQVJUIiwgIk1JTkQiKSkgKwogIHNjYWxlX2FscGhhX2Rpc2NyZXRlKCJBZ2UgZ3JvdXAiLCByYW5nZSA9IGMoMSwgMC41KSwKICAgICAgICAgICAgICAgICAgICAgICBsYWJlbHMgPSBjKCI0LTZ5IiwgIjctOXkiKSkgKwogIHNjYWxlX3NoYXBlX2Rpc2NyZXRlKCJBZ2UgZ3JvdXAiLCBsYWJlbHMgPSBjKCI0LTZ5IiwgIjctOXkiKSkgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUocGFuZWwuYm9yZGVyID0gZWxlbWVudF9yZWN0KGZpbGwgPSBOQSksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDAuNSksCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpCmBgYAoK